Rake的"环境"任务是什么?

Lai*_*uan 112 rake ruby-on-rails

根据" 自定义佣金任务 ":

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

据我所知,:winner => :environment意思是"做environment之前winner".但是什么environment?我应该什么时候使用它?

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

Sam*_*r C 114

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

请参阅" 自定义Rake任务 ".

  • 它在源中的定义在哪里?我找到了rake任务的位置,我找到了一个依赖于'app:environment'的空任务定义,但我找不到app的定义:environment task.https://github.com/rails/rails/blob/master/railties/lib/rails/tasks/engine.rake (4认同)
  • @odigity看起来像这样:https://github.com/rails/rails/blob/v4.2.4/railties/lib/rails/application.rb#L454 (4认同)

MrD*_*anA 39

它加载到您的Rails环境中,因此您可以实际使用您的模型,而不是.否则,它不知道那些事情.

因此,如果您完成了刚刚完成的任务,puts "HI!"则无需将:environment任务添加到依赖项中.但是如果你想做一些User.find(1)需要它的事情.


Lar*_*vie 31

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

另外=> :environment本身并没有提供任何与环境有关的变量,例如environment,@environment,RAILS_ENV等.