【问题标题】:How to run rake tasks from console?如何从控制台运行 rake 任务?
【发布时间】:2011-06-17 03:37:38
【问题描述】:

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

我在控制台上试过这个:

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

但它给了我这个错误:

RuntimeError: Don't know how to build task

好像耙子找不到任务。

任何帮助将不胜感激。

谢谢

编辑:我使用的是 rails 2.3.5

【问题讨论】:

    标签: console rake


    【解决方案1】:

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

    1. 加载耙子
    2. 正在加载您的 Rake 任务

    你错过了第二步。

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

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

    【讨论】:

    • 如果您需要多次运行任务(例如数据完整性检查器的应用程序启动时间过长),您可能需要注意说 .invoke.execute 之间的区别up)然后你会想要.execute这个任务。
    • 如果需要传递参数,请在invoke方法中进行:.invoke(arg1, arg2,...)
    • 当需要从应用程序本身运行 rake 任务时,这是最好的方法吗? (例如,每次运行测试套件时我都会运行db:seed 来重新植入数据库。我使用了上面的代码并且它可以工作,只是想知道这是最佳实践还是有其他方法?
    【解决方案2】:

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

    %x[rake db:migrate]
    

    编辑:我强烈建议使用.invoke,正如丹尼尔在接受的答案中所说的那样。

    【讨论】:

    • 问题是,rake 似乎无法识别我的任务。知道为什么吗?
    • 它完美运行@garno!抱歉,我知道已经一年了,突然我遇到了同样的需求。
    • 如果您愿意,也可以用反引号括起来。
    • 这很慢,因为它必须启动一个新进程并再次实例化您的 Rails 应用程序。 invoke 更好更高效。
    【解决方案3】:

    简单的方法是:

    Rails.application.load_tasks
    Rake::Task['my_task'].invoke
    

    【讨论】:

    • 这不仅是一种简单的方法,而且还意味着您无需启动新流程并再次实例化您的 Rails 应用程序。简单快!
    【解决方案4】:

    我正在使用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
    

    为我工作!

    【讨论】:

      【解决方案5】:

      请注意,如果您通过rails c 在rails 控制台中,您可以通过irb(main):001:0&gt; TaskClassName.new.my_task 调用/运行rake 任务方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 2010-11-13
        • 2010-09-23
        • 2011-05-10
        • 2013-09-01
        • 2012-11-15
        • 1970-01-01
        相关资源
        最近更新 更多