What's the 'environment' task in Rake?

2019-01-10 11:56发布

According to "Custom Rake Tasks":

desc "Pick a random user as the winner"
task :winner => :environment do
  puts "Winner: #{pick(User).name}"
end

As far as I know, the :winner => :environment means "do environment before winner". But what's environment? When should I use it?

I tried rake -T, but in the list I couldn't find environment.

3条回答
Root(大扎)
2楼-- · 2019-01-10 12:20

Including => :environment will tell Rake to load full the application environment, giving the relevant task access to things like classes, helpers, etc. Without the :environment, you won't have access to any of those extras.

Also => :environment itself does not make available any environment-related variables, e.g. environment, @environment, RAILS_ENV, etc.

查看更多
霸刀☆藐视天下
3楼-- · 2019-01-10 12:26

It loads in your Rails environment so you can actually use your models and what not. Otherwise, it has no idea about those things.

So if you made a task that just did puts "HI!" then you don't need to add the :environment task to the dependencies. But if you wish to do something like User.find(1) well that will need it.

查看更多
【Aperson】
4楼-- · 2019-01-10 12:40

You can get access to your models, and in fact, your whole environment by making tasks dependent on the environment task. This lets you do things like run rake RAILS_ENV=staging db:migrate.

See "Custom Rake Tasks".

查看更多
登录 后发表回答