首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >doesnt模块Pdo在访问网站或控制台时未获得正确的数据库参数

doesnt模块Pdo在访问网站或控制台时未获得正确的数据库参数
EN

Stack Overflow用户
提问于 2014-12-23 16:22:50
回答 1查看 609关注 0票数 1

我正在通过部署一个Zf2应用程序与Doctrine在Aws豆柄。Composer正在运行并设置所有内容,然后我运行一个symfony控制台命令,使用在我的配置中指定的参数生成数据库和模式。我按照这里的示例来获得配置的rds参数。

http://www.michaelgallego.fr/blog/2013/05/24/how-to-deploy-safe-zf-2-applications-on-amazon-elastic-beanstalk/

所有这些都可以访问该网站。此时,它会给我一个Pdo访问数据库的错误。

代码语言:javascript
复制
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002]
No such file or directory' in
/var/app/current/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:43 Stack
trace: #0
/var/app/current/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php(43):
PDO->__construct('mysql:host=loca...', 'username', 'password', Array) #
/var/app/current/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php(45):
Doctrine\DBAL\Driver\PDOConnection->__construct('mysql:host=loca...', 'username',
'password', Array) #2
/var/app/current/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(360):
Doctrine\DBAL\Driver\PDOMySql\Driver->connect(Array, 'username', 'password', Array) #3
/var/app/current/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(429):
Doctrine\DBAL\Connection->connect() #4
/var/app/current/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(389):
Doctrine\DBAL\Connection->getDatabasePlatformVersion() #5
/var/app/current/vendor/doctrine/dbal/lib/Doctrine/DBAL/C in

zf2应用程序是智能的。部署后,如果我登录到服务器并运行php命令

代码语言:javascript
复制
php public/index.php development enable

它将产生与前端网站相同的错误。

代码语言:javascript
复制
PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002]
No such file or directory' in
/var/app/current/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:43

我正在通过aws配置中的控制台命令来设置数据库模式。这确实设置了正确的数据库,并运行架构和数据导入。

.eb扩展名/合成器.composer.config

代码语言:javascript
复制
container_commands:
  01installDev:
  command: "/usr/bin/composer.phar install --dev"
  02makeDatabase:
  command: "/usr/bin/php /var/app/ondeck/cwg.php database:create"
  03createDatabase:
  command: "/usr/bin/php /var/app/ondeck/cwg.php database:fresh"

config/autoload/database.global.php

代码语言:javascript
复制
return array(
'doctrine' => array(
    'connection' => array(
        'orm_default' => array(
            'driverClass' => 'Doctrine\\DBAL\\Driver\\PDOMySql\\Driver',
            'params' => array(
                'host'     => $_SERVER['RDS_HOSTNAME'],
                'port'     => $_SERVER['RDS_PORT'],
                'user'     => $_SERVER['RDS_USERNAME'],
                'password' => $_SERVER['RDS_PASSWORD'],
                'dbname'   => 'api_default',
            ),
        ),
    ),
  ),
);

当我运行控制台命令时,我只是创建一个包含这些文件中参数的原则实例,这是与zf2应用程序的唯一区别,但我确实得到了正确的params。

为了调试这一点,我将$options和$pdo变量转储到一个理论或模块工厂中。vendor/doctrine/doctrine-orm-module/src/DoctrineORMModule/Service/DBALConnectionFactory.php

代码语言:javascript
复制
var_dump($options);die();
object(DoctrineORMModule\Options\DBALConnection)#369 (8) { ["configuration":protected]=>
string(11) "orm_default" ["eventmanager":protected]=> string(11) "orm_default
["pdo":protected]=> NULL ["driverClass":protected]=> string(36)
"Doctrine\DBAL\Driver\PDOMySql\Driver" ["wrapperClass":protected]=> NULL
["params":protected]=> array(5) { 
      ["host"]=> string(9) "localhost" 
      ["port"]=> string(4) "3306" 
      ["user"]=> string(8) "username" 
      ["password"]=> string(8) "password" 
      ["dbname"]=>string(8) "database" 
} ["doctrineTypeMappings":protected]=> array(0) {
["__strictMode__":protected]=> bool(true) } 

var_dump($pdo);die();
NULL

正在使用的参数是默认的教义参数。如果zf2没有加载配置文件,我不知道这是否会在进程的早期进行,但是在错误发生之前,我还没有找到与var_dump连接相关的任何其他位置。在我的aws配置设置中,或者在rds服务器和api之间的防火墙规则中(我假设这是为您配置的,因为它设置了所有内容),还是没有正确地执行我的zf2配置,我做错了什么?任何帮助都是非常感谢的。

编辑

我把var_dump移到了第60行

代码语言:javascript
复制
var_dump($connection->getParams());die();
array(8) { ["driverClass"]=> string(36) "Doctrine\DBAL\Driver\PDOMySql\Driver
["wrapperClass"]=> NULL ["pdo"]=> NULL ["host"]=> string(9) "localhost" ["port"]=>
string(4) "3306" ["user"]=> string(8) "username" ["password"]=> string(8) "password
["dbname"]=> string(8) "database" } 

我认为这很好地说明了Doctrine根本没有看到我的配置,而且不知怎么的,我正在做一些事情,或者不做一些事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-23 17:48:35

不知何故,在application.config.php文件中设置了一个用于配置的静态位置。

代码语言:javascript
复制
'config_glob_paths' => array(
        '/home/myhome/api/config/autoload/{,*.}{global,local}.php'
    ),

一旦我把它改成

代码语言:javascript
复制
'config_glob_paths' => array(
        'config/autoload/{,*.}{global,local}.php'
    ),

教条开始得到正确的配角。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27624181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档