OpsWorks хранит переменные среды в разных местах в зависимости от того, какое приложение вы развертываете. В Rails/Passenger они должны быть сохранены в конфигурационном файле Apache #{your_app_name}.conf
. (Source)
Это означает, что они недоступны в вашей обычной среде оболочки.
Я знаю, что рецепты Node.js хранятся в файле /srv/www/#{app_name}/shared/app.env
... который затем отправляется в среду, чтобы запустить сервер узла. Эта деталь реализации также означала, что вы могли бы написать сценарии оболочки, которые были получены из файла app.env
, а затем вызвали некоторый сценарий Node или что-то еще.
Конечно, Rails не является узлом. Я даже не подозреваю, что переменные окружающей среды также хранятся где-то в другом месте: быстрый взгляд на рецепты Rails в кулинарных книжках OpsWorks не нашел ничего очевидного, но, возможно, я что-то пропустил.
В зависимости от количества изменений вы собираетесь в вашем OpsWorks поваренной книге, вы можете создать рецепт Deploy, что делает что-то вроде этого:
application_environment_file do user deploy[:user] group deploy[:group] path ::File.join(deploy[:deploy_to], "shared") environment_variables deploy[:environment_variables] end
(возможно регулировочный пути)
Затем, чтобы запустить консоль, когда вы используете SSHed на сервере, сделайте что-нибудь вроде
sudo source /srv/www/my_app_name/shared/app.env; bundle exec rails console -e production
или что-то еще.
Если я схожу и запускаю 'sudo opsworks-agent-cli get_json', я вижу, что у MYKEY есть' {"deploy": {"server": {"environment": {"MYKEY": "1234"} .. ' – peterept
Вы получили решение для этого? – loganathan
Странно, что выяснилось, что он работает в экземплярах производства Passenger, но не работает, когда я '$ bundle exec rails c production' как пользователь развертывания (который является тем же самым пользователем, что и Пассажир работает под). Apache работает под www-данными, но если я вхожу в качестве www-data или deploy, я не вижу никаких env vars. Так что я бегу, но я понятия не имею, что происходит под капотом. – peterept