Rails如何运行rake任务

114

如何在终端/控制台中运行这个rake文件?

我的statistik.rake位于lib/tasks目录中。

desc "Importer statistikker"
namespace :reklamer do
  task :iqmedier => :environment do
    ...
  end
  task :euroads => :environment do
    ...
  end
  task :mikkelsen => :environment do
    ...
  end
  task :orville => :environment do
    ...
  end
end
7个回答

157
您可以通过运行以下命令在shell中运行Rake任务:

`您可以通过运行以下命令在shell中运行Rake任务:

`

rake task_name

要从Ruby中运行(例如在Rails控制台或其他Rake任务中):

Rake::Task['task_name'].invoke

为了在同一个命名空间中使用单个任务运行多个任务,请在您的命名空间中创建以下新任务:

task :runall => [:iqmedier, :euroads, :mikkelsen, :orville] do
  # This will run after all those tasks have run
end

1
我该如何一次性运行所有任务,还是需要将命名空间更改为任务? - Rails beginner
1
如果您想一次运行所有任务,请设置任务:all => [:a,:b,:c],然后运行rake reklamer:all。 - Spike Gronim
1
那不是你的问题的一部分,但你需要创建一个新任务来调用它们中的每一个,这有一个简写方式。请查看我的更新答案。 - Andrew Marshall
1
@Andrew Marshall,顺便说一下,如果您想运行所有任务,可以使用task :runall => Rake::Task.tasks。但是此行必须在所有任务之后声明。 - Vasiliy Ermolovich
@tzown,正如我在答案中所说的,它应该放在与您想要运行的其他任务相同的命名空间中。 - Andrew Marshall
显示剩余6条评论

30
Rake::Task['reklamer:orville'].invoke
或者
Rake::Task['reklamer:orville'].invoke(args)

这种方法可行,但是正确的打包raks任务的方式是由@andrew-marshall回答的。 - Tom Harrison
4
如果你要像“正确”的方式这样说话,请提供参考。我的回答是对原问题的回应。 - Luke W
3
作为理论测试,我尝试运行Rake::Task ['db:seed'] .invoke,但它没有运行,显示“不知道如何构建任务'db:seed'”。 - lulalala
如果你遇到“不知道如何构建任务”错误,请查看这个答案 - dlauzon

29
有时候在控制台中无法加载您的 rake 任务,这时您可以尝试以下命令。
require "rake"
YourApp::Application.load_tasks
Rake::Task["Namespace:task"].invoke

这些引号不好,但我不能编辑它们,因为这是一个太小的编辑! - nroose
2
尽管这不是对所提出问题的真正答案,但这正是我一直在寻找并解决了我的问题(YourApp :: Application.load_tasks)。谢谢! - Dennis van de Hoef - Xiotin
2
Rails.application.load_tasks(而不是YourApp :: Application.load_tasks)也可以使用,更加通用。 - dlauzon

24

你尝试过运行rake reklamer:iqmedier吗?

我的自定义rake任务在lib目录下,而不是lib/tasks。不确定这是否重要。


1
我想一次性运行所有任务。 - Rails beginner

15

如果您不确定如何运行Rake任务,请首先找出您有哪些任务,并列出运行这些任务的命令。

在终端上运行rake --tasks

它将列出类似以下的任务:

rake gobble:dev:prime             
rake gobble:dev:reset_number_of_kits                                    
rake gobble:dev:scrub_prod_data

如上所述,您可以使用rake gobble:dev:prime运行任务。


4

1
在Rails 4.2中,上述方法不起作用。
  1. Go to the Terminal.
  2. Change the directory to the location where your rake file is present.
  3. run rake task_name.
  4. In the above case, run rake iqmedier - will run only iqmedir task.
  5. run rake euroads - will run only the euroads task.
  6. To Run all the tasks in that file assign the following inside the same file and run rake all

    task :all => [:iqmedier, :euroads, :mikkelsen, :orville ] do #This will print all the tasks o/p on the screen 
    end
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接