Я настраиваю производственный и предпроизводственный сервер с 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
и оболочка могли получить к ним доступ?
🤔 А знаете ли вы, что...
Фреймворк предоставляет средства для масштабирования приложений, включая работу с множеством серверов и балансировку нагрузки.
Эти переменные "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, чтобы сообщить им об этом, и они не заинтересованы в его изменении.