2013-03-28 2 views
5
task :some_task, :environment do |t, args| 
    puts Rails.env #=> development, production, etc 
    puts ENV #=> {} 
end 

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

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

+0

Как вы используете эту задачу? ENV - это основная вещь Ruby, поэтому она всегда должна отражать доступные переменные среды. –

+2

'$ rake some_task' в каталоге приложения. Некоторые из 'ENV' находятся в' .env', и мне может понадобиться выполнить '$ foreman run rake task' для материала Heroku. – Narfanator

+1

@ Нарфанатор, вы должны ответить на этот вопрос как реальный ответ, чтобы я мог поддержать вас. Выполнение '$ foreman run rake some_task' - правильный ответ –

ответ

5

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

"Бригадир" инструмент Используйте Heroku в. Поместите все переменные среды в .env:

VAR=value 

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

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

VAR: value 

и все. rake some_task.

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

+0

Я знаю, что это старый вопрос, но как его помещать в файл .env или application.yml, чтобы ваши пароли/ключи не содержались в кодовой базе? Я думал, что это важная причина для использования переменных ENV. Разве нет какого-то звонка, который мы можем сделать от Рейка, который их получит? – JosephK

+0

Вы (обычно) не проверяете свой application.yml или .env в репо; это то, что я имел в виду под «кодовой базой», и помещая их непосредственно в ENV главного компьютера, сталкивается с собственными проблемами. Мой вопрос * есть * в основном с просьбой о некотором звонке, который мы можем сделать от Rake, но я его не нашел. – Narfanator

+0

Более опытные разработчики в моей компании решили использовать этот шаблон: 'config = YAML.load (" application.yml ")', но они также решили не объяснять, почему. YMMV; Я использую его в некоторых ситуациях (т.е. синатра), а не в других (т. Е. Рельсах). – Narfanator