Использовать переменные среды в задаче Rake

task :some_task, :environment do |t, args|
  puts Rails.env #=> development, production, etc
  puts ENV #=> {}
end

Я установил некоторые переменные среды (либо через локальный .env, либо через Heroku Config через Herokusan), например, какое ведро AWS использовать, и я хочу сослаться на них в задаче rake, но ENV — это пустой хэш. Я знаю, что что-то, связанное с окружением, делается из-за зависимости задачи :environment и того, что Rails.env имеет значение, но я не совсем понятен в деталях.

Итак, как я могу использовать ENV в задаче Rake?


person Narfanator    schedule 28.03.2013    source источник
comment
Как вы выполняете эту задачу? ENV — это основная вещь Ruby, поэтому она всегда должна отражать ваши доступные переменные окружения.   -  person Tim Dorr    schedule 28.03.2013
comment
$ rake some_task в каталоге приложения. Некоторые из ENV находятся в .env, и мне может понадобиться сделать $ foreman run rake task для материала Heroku.   -  person Narfanator    schedule 29.03.2013
comment
@Narfanator, вы должны ответить на это как на реальный ответ, чтобы я мог проголосовать за вас. Делать $ foreman run rake some_task — правильный ответ   -  person Andrew Gertig    schedule 22.04.2013


Ответы (1)


Два хороших способа сделать это:

Используйте инструмент Heroku «Foreman». Поместите все ваши переменные среды в .env:

VAR=value

и запустите foreman run rake some_task.

Или (и я бы порекомендовал этот путь), используя драгоценный камень «Фигаро». Поместите свои вары в config/application.yml:

VAR: value

и это все; rake some_task.

Я бы порекомендовал последнее, хотя бы потому, что rake figaro:heroku поднимет вашу среду, как указано в application.yml.

person Narfanator    schedule 18.12.2013
comment
Я знаю, что это старый вопрос, но как поместить их в файл .env или application.yml, чтобы ваши пароли/ключи не попадали в кодовую базу? Я думал, что это важная причина для использования переменных ENV. Разве мы не можем позвонить Рейку, чтобы забрать их? - person JosephK; 08.04.2015
comment
Вы (как правило) не проверяете свой application.yml или .env в репо; это то, что я имел в виду под кодовой базой, и размещение их непосредственно в ENV хост-компьютера приводит к собственным проблемам. Мой вопрос состоит в основном в том, чтобы попросить сделать какой-нибудь звонок от Rake, но я не нашел его. - person Narfanator; 19.04.2015
comment
Более опытные разработчики в моей компании решили использовать этот паттерн: config = YAML.load("application.yml"), но тоже решили не объяснять почему. YMMV; Я использую его в некоторых ситуациях (например, синатра) и не использую в других (например, рельсы). - person Narfanator; 19.04.2015
comment
Хорошо знать. Спасибо за обновления. Иногда обходной путь — лучшее, что вы можете сделать. - person JosephK; 23.04.2015