Мы развертываем приложение на основе Laravel в AWS с помощью OpsWorks. Мы определили переменные среды через консоль OpsWorks, и Apache правильно их видит. Однако при выполнении таких задач CLI, как artisan
команды, они не задаются.
Я понимаю, что это связано с тем, что в файлах конфигурации виртуального хоста Apache установлены переменные среды. Я подумал, что могу исправить проблему, запустив ловушку развертывания, которая отображает эти переменные и добавляет их в /etc/environment
, но это не работает (а даже если бы и работало, это было бы невероятно слабым).
Есть ли другой способ добиться этого? Допускает ли OpsWorks это конкретное требование?
Спасибо.
Вот как нам удалось это решить (хотя и не идеально, но помогает):
getenv()
для доступа ко всем переменным среды: Apache не увидит их при использовании $_ENV
..env.php
, Конфигурационный файл Laravel для производственной среды. Переменные среды будут доступны для кода ловушки развертывания через node[:deploy]['<short_app_name>'][:environment_variables][:<VAR_NAME>]
.php artisan --env=production --force <command-to-be-run>
.Мы в основном используем вышеуказанное для запуска миграции из первого экземпляра в очереди развертывания.
Если вы также используете собственные кулинарные книги Chef, вы можете установить свойства из переменных JSON или OpsWorks Application во время выполнения с помощью шаблона Chef. Ниже приведен пример config.php для настройки Moodle. Предполагается, что у вас есть приложение под названием webapp с настроенными атрибутами, такими как moodle_dbhost, moodle_dbname, moodle_dbuser и т. Д.
CFG->dbtype = 'pgsql';
$CFG->dblibrary = 'native';
$CFG->dbhost = '<%= node['deploy']['webapp']['environment']['moodle_dbhost'] %>';
$CFG->dbname = '<%= node['deploy']['webapp']['environment']['moodle_dbname'] %>';
$CFG->dbuser = '<%= node['deploy']['webapp']['environment']['moodle_dbuser'] %>';
$CFG->dbpass = '<%= node['deploy']['webapp']['environment']['moodle_dbpwd'] %>';
$CFG->prefix = 'mdl_';
$CFG->dboptions = array (
'dbpersist' => 0,
'dbport' => '<%= node['deploy']['webapp']['environment']['moodle_dbport'] %>',
'dbsocket' => 0,
);
$CFG->wwwroot = 'http://example.com/moodle/';
$CFG->dataroot = '/var/www/moodle-data/';