Symfony2保存环境变量的位置

时间:2014-12-28 21:39:09

标签: php apache symfony variables environment

我已经看过很多关于使用环境变量配置Apache2虚拟主机并将这些变量用作站点中的参数的教程。但是,我遇到的问题是当我运行php app / console cache时:清除或重新加载我的数据夹具,我收到以下错误: 您已请求不存在的参数...

如果我在重新加载灯具之前首先导出参数,则在设置环境变量时错误消失。这是有道理的,因为该函数不使用Apache执行并需要环境变量集。但是,当我手动清除缓存时,这并不能解决我的问题。

所以我的问题是,我实际上想在哪里保存这些环境变量?

我想存储依赖于使用哪个虚拟主机的站点特定信息。

我可以将它们存储在我的〜/ .profile bash文件中,但这没有用,我阅读的所有文档都只是说存储虚拟主机(对于Apache)。但是这些文档都没有提到在访问网站的Web浏览器之外执行脚本,例如重新加载夹具,运行迁移或清除缓存,这只是我部署源代码时的一个问题。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以将应用程序变量放在app/config/config.yml中。你可以把它放在那里:

parameters:
    your.parameter.1: value1
    your.parameter.2: value2

如果您使用任何类型的版本控制系统,您可以将这些变量排除在单独的文件中,并在版本控制存储库中忽略此文件。您还应该在config.yml中包含此文件。例如,如果您将上述变量放在app/config/example.yml中,则应添加app/config/config.yml

imports:
- { resource: example.yml }

修改

您始终可以按如下方式输入参数:

parameters:
    domain1:
       param1: value1
       param2: value2
    domain2:
       param1: value1
       param2: value2
    domain3:
       param1: value1
       param2: value2

然后根据当前域在要使用它们的位置读取这些变量,或者也可以设置根据当前域设置公共变量的服务。对于命令行,您可以使用默认值。

答案 1 :(得分:0)

所以,仅仅因为这是我的一个宠儿,我敦促你不要在配置文件中放置特定于环境的信息。所以需要的是两个必须保持同步的文件。一个文件用于命令行,一个用于Apache(或您选择的HTTP服务器)环境变量

after_commit :do_foo, on: :create
after_commit :do_bar, on: :update
after_commit :do_baz, on: :destroy

after_commit :do_foo_bar, on: [:create, :update]
after_commit :do_bar_baz, on: [:update, :destroy]

用法

对于命令行,每次运行Symfony命令时,我都会获取环境(此示例适用于bash shell)

CL: /var/www/applications/coolapp/coolapp.sh
Apache: /var/www/applications/coolapp/coolapp.apache.conf

在网站的Apache配置中,我添加了一个包括 /etc/httpd/conf.d/coolapp.local.conf

$ . ./coolapp.sh
$ app/console cache:clear

这些文件中有什么?

coolapp.sh将包含类似

的内容
<VirtualHost coolapp.local:443>
...
Include /var/www/applications/coolapp/coolapp.apache.conf
...
</VirtualHost>

和coolapp.conf会有

export SYMFONY__APP_USER = foo
export SYMFONY__APP_PASS = foobar01

所以我的每个环境(生产,qa,stage,test,dev,localdev)都会有这两个文件。无需进入代码就可以更改它们。 在Symfony中,您可以访问这些变量,如

SetEnv SYMFONY__APP_USER fop
SetEnv SYMFONY__APP_PASS foobar01