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

Faj*_*rmf 77 console rake

我想从控制台调用我的rake任务.它可行吗?如果有,怎么办?

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

require 'rake'
Rake::Task['my_task'].invoke
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

RuntimeError: Don't know how to build task
Run Code Online (Sandbox Code Playgroud)

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

任何帮助,将不胜感激.

谢谢

编辑:我正在使用rails 2.3.5

Dan*_*ski 160

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

  1. 加载耙子
  2. 加载你的Rake任务

你错过了第二步.

通常这是在Rakefile中完成的,但你必须在这里手动完成:

require 'rake'
Rails.application.load_tasks # <-- MISSING LINE
Rake::Task['my_task'].invoke
Run Code Online (Sandbox Code Playgroud)

  • 目前有`Rails.application.load_tasks`命令 (27认同)
  • 您可能需要注意说".invoke"和".execute"之间的区别,如果您需要多次运行任务(例如数据健全性检查程序需要花费很长时间才能启动)那么您将会想要`.execute`这个任务. (7认同)
  • 有关更多选项,请参阅http://stackoverflow.com/questions/577944/how-to-run-rake-tasks-from-within-rake-tasks (2认同)
  • 如果需要传递参数,请在invoke方法中进行:`.invoke(arg1,arg2,...)` (2认同)

gar*_*rno 14

最简单的方法是从irb 运行%x [ command ].我不确定你想要实现的目标.

%x[rake db:migrate]
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你愿意的话,你也可以把它包围在后面. (2认同)

S.Y*_*dav 7

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

app/lib/task_to_execute.rake
Run Code Online (Sandbox Code Playgroud)

这是对我有用的命令-

加载Rails.application.load_tasks

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

为我工作!


Moh*_*ata 6

简单的方法是:

Rails.application.load_tasks
Rake::Task['my_task'].invoke
Run Code Online (Sandbox Code Playgroud)