我想使用环境变量设置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?
答案 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参数中定义的值是 当环境变量不可用时用作后备。