2011-04-12 137 views
56

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

我在LIB /任务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 

回答

86

你不应该被运行

rake task_name 

如果你真的必须运行在Ruby Rake任务运行Rake任务在Rails的控制台,但不是终端/命令提示符,你应该能够做到:

Rake::Task['task_name'].invoke 

但是通常只有在Rake任务本身才能运行另一个。

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

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

如何一次耙出所有任务,或者是否需要将命名空间更改为任务? – 2011-04-12 21:33:35

+1

如果你想一次运行所有的任务使任务:all => [:a,:b,:c],然后运行rake reklamer:全部 – 2011-04-12 21:37:54

+1

这不是你问题的一部分,但你必须做一个新的任务,调用他们每个人,这是一个速记。看到我更新的答案。 – 2011-04-12 21:38:14

18

你试过rake reklamer:iqmedier

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

+1

我想一次 – 2011-04-12 21:22:54

+0

代替打字耙reklamer的运行所有任务中执行以下操作:iqmedier, rake reklamer:euroads .... – 2011-04-12 21:23:44

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

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

这种方法可行,但捆绑raks任务的“正确”方式由@ andrew-marshall解答。 – 2012-10-15 14:17:07

+3

请提供参考,如果你打算说'正确'的方式......'。我的回答是对原始问题的回应。 – 2012-10-24 19:32:23

+2

作为理论测试,我尝试运行'Rake :: Task ['db:seed']。invoke',但它不运行,说:“不知道如何构建任务'db:seed'” – lulalala 2013-09-04 07:40:01

1

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

  1. 转到终端。
  2. 将目录更改为您的rake文件所在的位置。
  3. 运行rake task_name。
  4. 在上面的例子中,运行rake iqmedier - 只运行iqmedir任务。
  5. 运行rake euroads - 将只运行euroads任务。
  6. 要运行在该文件中的所有任务分配 相同的文件并运行耙所有

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