Как установить переменную окружения в Vagrant, к которой PHP может получить доступ

Я хочу, чтобы в моей локальной среде разработки была установлена ​​переменная среды, чтобы мое 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(),

введите описание изображения здесь

введите описание изображения здесь

0

Решение

Вы запускаете инициализацию как 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
...
2

Другие решения

Понял! Я модифицировал /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

Это не идеально: — /

0

По вопросам рекламы [email protected]