我已经看过很多关于使用环境变量配置Apache2虚拟主机并将这些变量用作站点中的参数的教程。但是,我遇到的问题是当我运行php app / console cache时:清除或重新加载我的数据夹具,我收到以下错误: 您已请求不存在的参数...
如果我在重新加载灯具之前首先导出参数,则在设置环境变量时错误消失。这是有道理的,因为该函数不使用Apache执行并需要环境变量集。但是,当我手动清除缓存时,这并不能解决我的问题。
所以我的问题是,我实际上想在哪里保存这些环境变量?
我想存储依赖于使用哪个虚拟主机的站点特定信息。
我可以将它们存储在我的〜/ .profile bash文件中,但这没有用,我阅读的所有文档都只是说存储虚拟主机(对于Apache)。但是这些文档都没有提到在访问网站的Web浏览器之外执行脚本,例如重新加载夹具,运行迁移或清除缓存,这只是我部署源代码时的一个问题。
非常感谢您的帮助。
答案 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