Rake 中的“环境”任务是什么?

根据《 自定义 Rake 任务》 :

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

据我所知,:winner => :environment的意思是“在 winner之前做 environment”。但是什么是 environment? 我应该什么时候使用它?

我试过 rake -T,但是在列表中我找不到 environment

74733 次浏览

它加载在您的 Rails 环境中,因此您可以实际使用您的模型和其他东西。否则,它对这些东西一无所知。

因此,如果您创建了一个刚刚执行 puts "HI!"的任务,那么就不需要将 :environment任务添加到依赖项中。但是,如果你想做像 User.find(1)这样的东西好,将需要它。

您可以通过使任务依赖于环境任务来访问您的模型,实际上,还可以访问整个环境。这可以让你做像 run rake RAILS_ENV=staging db:migrate这样的事情。

请看“ 自定义 Rake 任务”。

包括 => :environment将告诉 Rake 加载完整的应用程序环境,让相关任务访问类、助手等等。没有 :environment,你将无法访问任何这些额外的。

此外,=> :environment本身不提供任何与环境相关的变量,例如 environment@environmentRAILS_ENV等。