如何在Vagrant中设置PHP可以访问的环境变量

时间:2017-12-05 04:18:06

标签: php vagrant virtualbox vagrantfile

我希望我的本地开发环境设置一个环境变量,以便我的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()的一些屏幕截图。

enter image description here

enter image description here

2 个答案:

答案 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

这不理想: - /