Установка переменных среды в моторной станции
Я знаю из heroku, что можно добавить переменные среды, запустив heroku config:add MY_ENV_VAR=123
на местном уровне. Как я могу добиться того же с двигателем?
5 ответов
Мы столкнулись с той же проблемой и попросили EngineYard помочь. Джим Нит из EY вернулся со следующим ответом:
К сожалению, пассажир не получает переданные переменные среды из системы. Что вам нужно сделать, это создать оболочку ruby, которая определяет переменные вашей среды, и запустить пассажир, используя это, как описано здесь:
http://blog.phusion.nl/2008/12/16/passing-environment-variables-to-ruby-from-phusion-passenger/
Я создал вам основной рецепт шеф-повара, который будет делать именно это:
https://github.com/jimneath/ey-cloud-recipes/tree/master/cookbooks/passenger_env_vars
Вам нужно будет обновить следующий файл с вашими переменными среды:
/ey-cloud-recipes/blob/master/cookbooks/passenger_env_vars/templates/default/env.custom.erb
Для Unicorn это довольно просто, используя env.custom. Посмотрите на мой ответ здесь /questions/3706893/ustanovit-peremennyie-okruzheniya-na-engine-yard/3706903#3706903
Я не думаю, что вы можете = /.
Один из обходных путей, который мы используем в наших Rails-приложениях, - это ssh (ey ssh) в EngineYard и создайте файл в vim /data/your_app_name/shared/config/exports.rb. Этот файл может выглядеть примерно так:
ENV["AWS_ACCESS_KEY_ID"] = "your key"
ENV["AWS_SECRET_ACCESS_KEY"] = "your secret"
ENV["AWS_BUCKET"] = "your bucket"
Затем в config / boot.rb вам нужен файл:
require File.expand_path('./exports', File.dirname(__FILE__))
Это ни красиво, ни легко. Тем не менее, он позволяет вам использовать секреты в вашем приложении, которые вы не должны проверять в системе контроля версий!
Если вы хотите запустить задачу rake (например, cron job), для которой нужны эти переменные среды, сохраните переменные в /data/my_app/shared/config/env.custom
source /data/my_app/shared/config/env.custom && cd /data/my_app/current/ && bundle exec rake my_rake_task
Я также использовал Heroku
ранее сейчас я переехал в Engineyard
, Вот как я получаю мои переменные ENvironemnt в Heroku
Я добавил драгоценный камень figaro
, Этот драгоценный камень в основном нуждается в файле application.yml
в app/config
каталог. когда Rails
приложение инициализируется, оно выполняется и загружает пару ключ-значение, установленную в YAML
отформатировать в память. В Heroku
Figaro
имеет возможность установить содержание application.yml
,
$ figaro heroku:set -e production
Однако в Engineyard
нам нужно вручную скопировать application.yml
с помощью SCP
вариант EY
Пакет и остальные вещи будут делать фигаро.
Сначала включите драгоценный камень figaro в gemfile и установите его.
Затем нам нужно использовать Engineyard-Hooks, чтобы скопировать файл /data/[your_app]/shared/config/application.yml
в /data/[your_app]/current/config/application.yml
, нам нужно использовать before_restart
крюк
# inside your project repo create a 'deploy' folder and
# inside deploy/before_restart.rb paste the following code with or without modifications
# This file is executed everytime after deploy just before your app restarts
on_app_servers_and_utilities do
# Copy the yaml files from `shared/config` to `current/config`
['application.yml'].each do |file_name|
run "ln -nfs #{config.shared_path}/config/#{file_name} #{config.release_path}/config/#{file_name}"
end
end
Зафиксируйте свои изменения и отправьте их в репозиторий github или куда-то еще.
Здесь не существует файла /data/[your_app]/shared/config/application.yml
, Теперь используйте следующую команду, чтобы скопировать файл с локального на сервер
# This copies the application.yml to every instance like app_master, app_slave, utilities, database, etc
$ ey scp config/application.yml HOST:/data/[your_app_name]/shared/config/ -e app_environment --all
Теперь вы можете развернуть свое приложение и получить все переменные среды.
Примечание. Вам необходимо вызывать приведенную выше команду для копирования файла на сервер каждый раз при загрузке среды. Означает, что если вы остановите постановку (например) и через некоторое время загрузите ее, вам нужно будет вызвать приведенную выше команду