Установка переменных среды в моторной станции

Я знаю из 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 отформатировать в память. В HerokuFigaro имеет возможность установить содержание 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

Теперь вы можете развернуть свое приложение и получить все переменные среды.

Примечание. Вам необходимо вызывать приведенную выше команду для копирования файла на сервер каждый раз при загрузке среды. Означает, что если вы остановите постановку (например) и через некоторое время загрузите ее, вам нужно будет вызвать приведенную выше команду

Другие вопросы по тегам