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

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

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

🤔 А знаете ли вы, что...
Фреймворк предоставляет средства для масштабирования приложений, включая работу с множеством серверов и балансировку нагрузки.


193
2

Ответы:

Эти переменные "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, чтобы сделать их доступными для граблей.


Решено

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

Невозможно хранить ваши секреты в средах 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-задачу, которая редактирует .bash_profile из root, не помещая это в контроль версий. Но это не кажется ни безопасным, ни профессиональным.

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

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