Rails如何运行Rake任务


93

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

我在lib / tasks中的statistik.rake

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

Answers:


130

您可以通过运行以下命令从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初学者,

1
如果要一次运行所有任务,请执行task:all => [:a,:b,:c],然后运行rake reklamer:all
Spike Gronim 2011年

1
那不是您的问题的一部分,但是您必须执行一个新任务来调用每个任务,这是一个简写。看到我更新的答案。
安德鲁·马歇尔

1
@Andrew Marshall,顺便说一句,task :runall => Rake::Task.tasks如果您想运行所有任务,可以使用。但是必须在所有任务之后声明此行。
Vasiliy Ermolovich 2011年

任务:runall =>应该去哪里?
Rails初学者,

25
Rake::Task['reklamer:orville'].invoke

要么

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

这种方法可以工作,但是@ andrew-marshall回答了打包raks任务的“正确”方法。
汤姆·哈里森

3
如果您要说“正确的方式...”,请提供参考。我的回答是对原始问题的回答。
路加福音

3
作为理论测试,我尝试运行Rake::Task['db:seed'].invoke但未运行,并说“不知道如何构建任务'db:seed'”
lulalala 2013年

21

你试过了rake reklamer:iqmedier吗?

我的自定义耙任务位于lib目录中,而不位于lib / tasks中。不确定是否重要。


1
我想一次运行所有任务
Rails初学者,

13

有时您的rake任务没有加载到控制台中,在这种情况下,您可以尝试以下命令

require "rake"
YourApp::Application.load_tasks
Rake::Task["Namespace:task"].invoke

这些引号不好,但是我不能编辑,因为它太小了!
nroose

即使这不是对所提问题的真正答案。这就是我一直在寻找并解决我的问题(YourApp :: Application.load_tasks)的目的。谢谢!
丹尼斯·范·德·霍夫

3

如果您不确定如何运行rake任务,请首先首先找出您拥有的任务,它还将列出用于运行任务的命令。

rake --tasks在终端上运行。

它将列出如下任务:

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

然后,您可以运行你的任务:rake gobble:dev:prime作为上市。


1

在rails 4.2中,以上方法无效。

  1. 转到终端。
  2. 将目录更改为您的rake文件所在的位置。
  3. 运行rake task_name。
  4. 在上述情况下,运行rake iqmedier-将仅运行iqmedir任务。
  5. 运行rake euroads-仅运行euroads任务。
  6. 要运行该文件中的所有任务,请在同一文件中分配以下内容并运行rake all

    task :all => [:iqmedier, :euroads, :mikkelsen, :orville ] do #This will print all the tasks o/p on the screen 
    end
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.