Как rake_deploy в jelastic работает с ENV

Я настраиваю производственный и предпроизводственный сервер с Jelastic и nginx для запуска Ruby on Rails. Имя моей базы данных и пароль находятся в переменных среды. Я установил их в оболочке через ssh в .bashrc и в /etc/nginx/app_servers/nginx-passenger.conf, как описано в Ссылка на конфигурацию для Passenger + Nginx, но rake_deploy не может их найти. Я написал rake-task, который выводит ENV, поэтому я вижу, что это не то же самое, когда я запускаю задачу как часть развертывания и из командной строки через ssh. Приложение Rails передает их через the passenger.conf, так что это работает, но страшно дублировать.

Есть ли способ, чтобы мои переменные среды были установлены в одном месте в этой настройке, чтобы приложение Rails, rake_deploy и оболочка могли получить к ним доступ?


person Daniel Ytterbrink    schedule 26.04.2018    source источник


Ответы (2)


Ответ в том, что это невозможно.

Невозможно хранить ваши секреты в средах ENV и использовать их как для вашего приложения rails, так и для ваших задач rake при использовании установки Jelastics Ruby, которая использует rake_deploy для запуска задач rake при развертывании.

Причина в том, что rake_deploy запускается как root. Я решил добавить эту рейк-задачу:

task :env do puts ENV.to_h.to_yaml sh %[whoami] end

который сначала печатает ENV, а затем выводит, от имени какого пользователя запущена команда.

Или, возможно, есть способ, если я сначала смогу запустить rake-task, которая редактирует .bash_profile из root, не помещая это в контроль версий. Но это не кажется ни безопасным, ни профессиональным.

Также некуда больше хранить свои секреты, которые хранятся вне контроля версий и сохраняются между развертываниями.

Мой провайдер PaaS связался с Jelastic, чтобы сообщить им об этом, и они не заинтересованы в его изменении.

person Daniel Ytterbrink    schedule 11.05.2018

Эти переменные "ALL_REQUESTS_LOCAL, DB_ADAPTER, DB_HOST, DB_NAME, DB_PASSWORD, DB_USERNAME, EMAIL_USER, EMAIL_PASSWORD, EMAIL_DOMAIN, EMAIL_ADDRESS" должны быть установлены в rakefile. "nginx_passenger.conf" - это файл конфигурации для Nginx, который не имеет ничего общего с переменными среды. Кроме того, вы можете попробовать добавить эти переменные в .bash_profile или .bashrc, чтобы сделать их доступными для граблей.

person Jelastic    schedule 26.04.2018
comment
Как вы предлагаете мне справиться с двумя производственными средами: одной для реального производства, а другой - для предварительной? Я предпочитаю иметь свой rakefile в git. - person Daniel Ytterbrink; 27.04.2018
comment
Итак, вы говорите, что я не могу разместить 12-факторное (12factor.net) приложение RubyOnRails с вашим решением? Это №1 и №3 меня беспокоит. - person Daniel Ytterbrink; 09.05.2018