Narfanator
Narfanator

Reputation: 5803

Use environment variables in Rake task

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

I set some environment variables (either via a local .env, or via Heroku Config via Herokusan), such as which AWS bucket to use, and I want to reference them in the rake task, but ENV is an empty hash. I know something related to environment gets done because of the :environment task dependency and that Rails.env has a value, but I'm not clear on the details.

So, how can I use ENV in a Rake task?

Upvotes: 7

Views: 9866

Answers (2)

vekozlov
vekozlov

Reputation: 684

Just in case somebody searches for another decision. I had a trouble getting ENV variable within rake task on production server. So I had application.yml file, but ENV['variable'] was just blank

My original command:

/usr/local/rvm/bin/rvm use 2.5.1 do bundle exec rake upload_source_maps_to_rollbar

Adding RAILS_ENV=production solved the issue:

RAILS_ENV=production /usr/local/rvm/bin/rvm use 2.5.1 do bundle exec rake upload_source_maps_to_rollbar

Upvotes: 2

Narfanator
Narfanator

Reputation: 5803

Two good ways to do it:

Use Heroku's "Foreman" tool. Put all your environment variables into .env:

VAR=value

and run foreman run rake some_task.

Or (and, I'd recommend this way), using the "Figaro" gem. Put your vars into config/application.yml:

VAR: value

and that's it; rake some_task.

I'd recommend the latter, if only because rake figaro:heroku will push your env up as it's specified in application.yml

Upvotes: 6

Related Questions