Rails如何运行rake任务

Rai*_*ner 80 ruby rake ruby-on-rails

如何在终端/控制台中运行此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
Run Code Online (Sandbox Code Playgroud)

And*_*all 112

您不应该在Rails控制台中运行Rake任务,而是在运行时在终端/命令提示符中运行

rake task_name
Run Code Online (Sandbox Code Playgroud)

如果你真的必须在Ruby中运行Rake任务,你应该能够做到:

Rake::Task['task_name'].invoke
Run Code Online (Sandbox Code Playgroud)

但这通常只在Rake任务本身完成,以运行另一个.

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

task :runall => [:iqmedier, :euroads, :mikkelsen, :orville] do
  # This will run after all those tasks have run
end
Run Code Online (Sandbox Code Playgroud)


Luk*_*e W 23

Rake::Task['reklamer:orville'].invoke
Run Code Online (Sandbox Code Playgroud)

要么

Rake::Task['reklamer:orville'].invoke(args)
Run Code Online (Sandbox Code Playgroud)

  • 如果你要说'正确的'方式......',请提供参考.我的回答是对原始问题的回答. (3认同)
  • 作为理论测试,我尝试运行`Rake :: Task ['db:seed'].invoke`但它没有运行,说"不知道如何构建任务'db:seed'" (3认同)

Cha*_*zak 20

你试过rake reklamer:iqmedier吗?

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


Pre*_*rem 9

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

require "rake"
YourApp::Application.load_tasks
Rake::Task["Namespace:task"].invoke
Run Code Online (Sandbox Code Playgroud)

  • 尽管这并不是问题的真正答案。这就是我一直在寻找并解决我的问题(YourApp::Application.load_tasks)。谢谢! (2认同)
  • 也可以使用“Rails.application.load_tasks”(而不是“YourApp::Application.load_tasks”),稍微更通用一些。 (2认同)

Rut*_*ins 8

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

rake --tasks在终端上运行。

它将列出如下任务:

rake gobble:dev:prime             
rake gobble:dev:reset_number_of_kits                                    
rake gobble:dev:scrub_prod_data
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令运行您的任务:rake gobble:dev:prime如所列。