Symfony2 Composer和环境变量

时间:2015-07-25 16:03:00

标签: symfony heroku environment-variables composer-php travis-ci

我想使用环境变量设置symfony2项目的配置。

在我定义的服务器中:

SYMFONY__DATABASE__USER
SYMFONY__DATABASE__PASSWORD
SYMFONY__DATABASE__NAME
SYMFONY__DATABASE__HOST
SYMFONY__DATABASE__DRIVER

我的parameters.yml.dist看起来像这样:

#app/config/parameters.yml.dist
parameters:
    database_host:     "%database.host%"
    database_port:     ~
    database_name:     "%database.name%"
    database_user:     "%database.user%"
    database_password: "%database.password%"
    database_driver:   "%database.driver%"

当我运行作曲家时,我得到一个异常

composer install --dev --no-interaction --prefer-source
[Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]                                                   
You have requested a non-existent parameter "database.driver". Did you mean one of these: "database_user", "database_driver"?

这些变量在服务器中定义,因此我可以修改parameters.yml.dist来定义这些值。但这并不是正确的方式,因为我真的想要使用的是环境变量。

注意:我想在travis,heroku和我的流浪汉机器中读取这个环境变量。我只想在存储库中拥有流浪的机器变量。

这是正确的方法吗? 怎么看我的参数.yml.dist?

3 个答案:

答案 0 :(得分:3)

看起来你做得还不错。

以下是Setting Environment Variables的完整文档,我相信您已阅读过。

重要的是要注意:

  

此外,为了让您的控制台工作(不使用Apache),   你必须将它们导出为shell变量。在Unix系统上,你可以   运行以下内容:

$ export SYMFONY__DATABASE__USER=user
$ export SYMFONY__DATABASE__PASSWORD=secret

我记得有一个类似的问题,我在APACHE上设置了一切,但是在运行命令时它没有工作,因为我忘了导出系统上的变量。

请注意,使用导出是一种临时解决方案,如果重置服务器,这些值将会丢失,您需要根据操作系统以永久方式进行设置。

答案 1 :(得分:1)

我认为你很久以前就已经解决了,但问题实际上是你在DATABASE和USER之间有2 _并且这个解析器有一个字符串替换函数,用一个__代替.

为了你的榜样,你应该这样写:

SYMFONY__DATABASE_USER - > database_user SYMFONY__DATABASE__USER - > database.user

答案 2 :(得分:0)

如果您的系统版本为> = 2.6.2:

,则可以尝试this bundle
  

此捆绑包提供了一种从环境中读取参数的方法   运行时的变量。 container参数中定义的值是   当环境变量不可用时用作后备。