如何从控制台运行rake任务?


84

我想从控制台调用我的rake任务。可以吗 如果是,该怎么办?

我在控制台上尝试了这个:

require 'rake'
Rake::Task['my_task'].invoke

但是它给了我这个错误:

RuntimeError: Don't know how to build task

就像耙子找不到任务一样。

任何帮助,将不胜感激。

谢谢

编辑:我正在使用rails 2.3.5

Answers:


188

运行Rake任务需要两个步骤:

  1. 装载
  2. 加载耙任务

您缺少第二步。

通常,这是在Rakefile中完成的,但是您必须在此处手动进行:

require 'rake'
Rails.application.load_tasks # <-- MISSING LINE
Rake::Task['my_task'].invoke

2
欲了解更多选项,请咨询stackoverflow.com/questions/577944/...

7
您可能要注意说.invoke和的区别.execute,如果您需要多次运行任务(例如,带有应用程序的数据完整性检查程序启动时间太长),则需要执行.execute该任务。
亩太短了

3
如果需要传递参数,请在invoke方法中进行操作:.invoke(arg1, arg2,...)
Nuno Silva,

14

最简单的方法是从irb运行%x [ command ]。我不确定您是否想要实现。

%x[rake db:migrate]

编辑:我强烈建议使用.invoke丹尼尔在已接受的答案中所说的方法。


1
问题是,耙子似乎无法识别我的任务。知道为什么吗?
Fajarmf

它完美工作@garno!对不起,我知道已经过了一年,突然间我遇到了同样的需求。
Fajarmf 2012年

2
如果需要,还可以将其包围在中间。
山姆·索菲斯

这很慢,因为它必须启动一个新进程并再次实例化Rails应用程序。invoke更好,更有效。
约书亚·品特


2

我正在使用rails 5.x.x,并且需要做同样的表格rails console
我在这里创建了rake任务-

app/lib/task_to_execute.rake

这是为我工作的命令-

加载 Rails.application.load_tasks

Rake::Task['task_to_execute:task_name'].invoke

为我工作!


1

请注意,如果您通过进入Rails控制台,则rails c可以通过以下方式调用/运行rake任务方法:irb(main):001:0> TaskClassName.new.my_task

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.