2

我已经在app/config/config_prod.yml中声明了一个配置,所以我可以在远程数据库上执行命令。

imports:
    - { resource: config.yml }
doctrine:
    dbal:
        driver:   %database_driver%
        host:     the-ip
        dbname:   the-database
        user:     the-user
        password: the-password

但是当我运行 php app/console doctrine:schema:update --dump-sql -e=prod它时,它仍然使用在parameters.yml中设置的配置。

Doctrine\Bundle\DoctrineBundle\Command\Proxy\UpdateSchemaDoctrineCommand方法中var_dump($this->getApplication()的A显示正确的环境没有从config_prod.yml获取配置execute

public $parameters =>
  array(428) {
    ...
    'kernel.environment' =>
    string(4) "prod"
   ...
    'database_host' =>
    string(9) "127.0.0.1"

我是否遇到了错误或者这个命令不能处理不同的环境?

4

1 回答 1

1

简短:您必须在 prod 环境中的每次配置更改后清除缓存。在开发环境中,每个请求都会重建缓存(某些部分不是)。但不是在生产中。

实际上,配置被编译到缓存中。在每个请求上从 YAML/XML 加载配置会太重。getDefaultParameters()在里面找方法app/cache/prod/appProdProjectContainer.php可以看到,所有的配置参数都合并成了一个巨大的数组。

您会注意到,此数组中的参数通常并不相同,您在config.yml. 这些参数的注入取决于捆绑包及其特定的扩展类。有关更多信息,请参阅语义配置

于 2013-09-09T08:11:05.543 回答