2011-08-12 71 views
89

据 “Custom Rake Tasks”:Rake中的“环境”任务是什么?

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

据我所知,:winner => :environment的意思是 “做environmentwinner之前”。但是什么是environment?我应该什么时候使用它?我想尝试rake -T,但在列表中找不到environment

+0

检查出新的语法http://stackoverflow.com/questions/12493337/rake-aborted-undefined-method-map-for-namesymbol –

回答

88

通过使任务依赖于环境任务,您可以访问您的模型,并且实际上可以访问整个环境。这可以让您执行诸如run rake RAILS_ENV=staging db:migrate之类的操作。

请参阅“Custom Rake Tasks”。

+3

哪里是它在源代码中定义?我发现了rake任务的位置,并且发现了一个依赖于'app:environment'的空白任务定义,但我找不到app:environment任务的定义。 https://github.com/rails/rails/blob/master/railties/lib/rails/tasks/engine.rake – odigity

+0

@odigity看起来像这里:https://github.com/rails/rails/blob/v4。 2.4/railties/lib/rails/application.rb#L454 –

31

它加载到您的Rails环境中,以便您可以真正使用您的模型,而不是。否则,它不知道这些事情。

所以,如果你做了一个任务,只是做了puts "HI!"那么你不需要将:environment任务添加到依赖关系。但是,如果你想做一些像User.find(1)那样需要的东西。

22

包括=> :environment会告诉Rake加载完整的应用程序环境,并允许相关任务访问诸如类,帮助程序等。如果没有:environment,您将无法访问任何这些额外内容。

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

+0

任务文档的方法太简单,无法理解。 –

相关问题