Я хочу, чтобы в моей локальной среде разработки была установлена переменная среды, чтобы мое 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
не возвращает «развитие», но меня особенно смущает, почему он возвращает один пробел, а не пустую строку или NULL, если он вообще не установлен. Что мне не хватает?
Бродяга 1.8.5
Virtualbox 5.1.30r118389
ОБНОВИТЬ:
Когда я SSH в поле, как бродячий пользователь, и запустить $ echo $APP_ENV
, это возвращает «развитие».
я добавил source /home/vagrant/.profile
к сценарию обеспечения, и PHP все еще не может видеть переменную, которую я устанавливаю.
UPDATE2:
Я думаю, что Apache может работать как www-data
, Вот несколько скриншотов из моего phpinfo()
,
Вы запускаете инициализацию как root
пользователь для которого ваш bash vagrant
пользователь, поэтому убедитесь, что запуск обеспечения как бродяги, добавив privileged: false
поэтому файлы будут принадлежать vagrant
и они будут работать
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
...
Понял! Я модифицировал /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 в другом месте вашего скрипта, вы сможете пропустить вторую строку.
Если это помогло вам, подберите ответ Фредерика Анри, который указал мне правильное направление, чтобы понять это.
НОТА
Одна проблема с текущим решением состоит в том, что он добавит новую строку в / etc / apache2 / envvars каждый раз вы обеспечили. Итак, после нескольких итераций я вижу
export APP_ENV=development
export APP_ENV=development
export APP_ENV=development
Это не идеально: — /