我希望我的本地开发环境设置一个环境变量,以便我的PHP应用程序可以读取它。
在我的Vagrantfile中,我有:
config.vm.provision "shell", inline: <<-SHELL
## Set environment variables...
echo "export APP_ENV=development" > /home/vagrant/.profile
echo "export APP_ENV=development" > /home/vagrant/.bashrc
...
在我的PHP代码中,我添加了:
var_dump(shell_exec( 'whoami' ));
var_dump(shell_exec( 'echo $APP_ENV' ));
输出结果为:
string(8) "vagrant "
string(1) " "
我记得重新配置我的盒子(很多次)。我很困惑为什么第二个var_dump
没有返回&#34;开发&#34;但我特别困惑为什么它会返回单个空格而不是空字符串,如果它根本没有设置则为NULL。我错过了什么?
Vagrant 1.8.5
Virtualbox 5.1.30r118389
更新
当我作为流浪者用户SSH进入框中并运行$ echo $APP_ENV
时,它会返回&#34; development&#34;。
我在配置脚本中添加了source /home/vagrant/.profile
,PHP仍然无法看到var I&m; m设置。
UPDATE2:
我认为Apache可能正在运行www-data
。这是我phpinfo()
的一些屏幕截图。
答案 0 :(得分:2)
您以root
用户身份运行配置为vagrant
用户,因此请务必通过添加privileged: false
将配置作为流浪者运行,以便vagrant
拥有这些文件。{{} 1}}并且它们将被运行
config.vm.provision "shell", privileged: false, inline: <<-SHELL
## Set environment variables...
echo "export APP_ENV=development" >> /home/vagrant/.profile
echo "export APP_ENV=development" >> /home/vagrant/.bashrc
...
答案 1 :(得分:0)
知道了!我正在修改/home/vagrant/.profile,但Apache正在运行www-data
所以这里有效:
config.vm.provision "shell", inline: <<-SHELL
## Set environment variables...
echo "export APP_ENV=development" >> /etc/apache2/envvars
sudo service apache2 restart
...
我必须重新启动apache才能使更改生效。如果你在脚本的其他地方重新启动apache,你应该可以跳过第二行。
如果这对你有所帮助,那么请向FrédéricHenri的回答提出,这个回答指出了我正确的方向来解决这个问题。
注意强> 当前解决方案的一个问题是它将在您提供的每个时间向/ etc / apache2 / envvars 添加一个新行。所以经过几次迭代后,我看到了
export APP_ENV=development
export APP_ENV=development
export APP_ENV=development
这不理想: - /