我刚刚开始使用CakePHP,我没有遇到任何麻烦,但我现在想通过适当的DBMS(例如postgres)来尝试它。我调整了database.php文件,指向我在本地postgres实例中创建的数据库:
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Postgres',
'persistent' => false,
'host' => 'localhost',
'port' => '5432',
'login' => 'cakephp',
'password' => 'cakephp',
'database' => 'cakephp',
'schema' => 'blog_tuto',
'prefix' => '',
//'encoding' => 'utf8',
);
public $test = array(
'datasource' => 'Database/Postgres',
'persistent' => false,
'host' => 'localhost',
'port' => '5432',
'login' => 'cakephp',
'password' => 'cakephp',
'database' => 'cakephp',
'schema' => 'blog_tuto',
'prefix' => '',
//'encoding' => 'utf8',
);
}
使用SQL客户端连接到此数据库时没有问题,但CakePHP会抱怨以下消息:
CakePHP is NOT able to connect to the database.
Database connection "Postgres" is missing, or could not be created.
Selected driver is not enabled
我已经验证了目前的postgres DboSource类。 postgres php模块也已安装:
$ php -m | grep pg
pdo_pgsql
pgsql
我错过了什么?感谢。
更新我:与Postgres相关的phpinfo输出如下:
pdo_pgsql
PDO Driver for PostgreSQL enabled
PostgreSQL(libpq) Version 9.1.9
Module version 1.0.2
Revision $Id: pdo_pgsql.c 321634 2012-01-01 13:15:04Z felipe $
pgsql
PostgreSQL Support enabled
PostgreSQL(libpq) Version 9.1.9
Multibyte character support enabled
SSL support enabled
Active Persistent Links 0
Active Links 0
Directive Local Value Master Value
pgsql.allow_persistent On On
pgsql.auto_reset_persistent Off Off
pgsql.ignore_notice Off Off
pgsql.log_notice Off Off
pgsql.max_links Unlimited Unlimited
pgsql.max_persistent Unlimited Unlimited
更新II :当我今天访问应用程序尝试关注Ajir's suggestion时,我出乎意料地收到了一条错误消息:“身份验证失败” - 意味着CakePHP现在可以连接。几个月前我安装了Postgres 9.3并没有重新创建教程对象;我需要做的就是运行SQL脚本,教程应用程序现在完全正常运行。
任何错误都可能仅限于Postgres 9.1。
答案 0 :(得分:1)
这可以解决您的问题:
sudo apt-get install php5-pgsql
答案 1 :(得分:0)
这可能是与Postgres 9.1相关的问题,Cake PHP与Postgres 9.3完美搭配。这不是一个真正的解决方案,但解决这个问题的方法是:
备份Postgres 9.1托管的数据库。
安装Postgres 9.3(最终在另一个端口运行)。
将数据库恢复为Postgres 9.3。
将database.php
配置指向Postgres 9.3(如果它在备用端口中运行)。
删除Postgres 9.1(如果不需要)。
答案 2 :(得分:0)
我的配置:Windows 7,IIS 7.5,php 5.3,postrgres 9.4,cakephp 2.6.3
我刚刚补充道:
extension=php_pgsql.dll
extension=php_pdo_pgsql.dll
答案 3 :(得分:-1)
请确保您使用的架构是blog_tuto
而不是public
,这是Postgresql中的默认设置。要对其进行测试,请尝试使用blog_tuto
切换public
。
为了避免编码问题,我建议您删除编码行的注释,并将您在数据库中使用的编码放在那里(例如UTF-8,LATIN1);