【问题标题】:Rails how to run rake taskRails 如何运行 rake 任务
【发布时间】:2011-08-04 05:55:18
【问题描述】:

如何在终端/控制台中运行这个 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

【问题讨论】:

    标签: ruby-on-rails ruby rake


    【解决方案1】:

    您可以通过运行以下命令从 shell 运行 Rake 任务:

    rake task_name
    

    从 Ruby 运行(例如,在 Rails 控制台或其他 Rake 任务中):

    Rake::Task['task_name'].invoke
    

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

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

    【讨论】:

    • 如何一次性完成所有任务,还是需要将命名空间更改为任务?
    • 如果你想一次运行所有任务 make task :all => [:a, :b, :c] 然后运行 ​​rake reklamer:all
    • 这不是你的问题的一部分,但你必须做一个新的任务来调用他们每个人,这是一个简写。请参阅我的更新答案。
    • @Andrew Marshall,顺便说一句,如果您想运行所有任务,可以使用task :runall => Rake::Task.tasks。但是这一行必须在所有任务之后声明。
    • 任务 :runall => 应该去哪里?
    【解决方案2】:
    Rake::Task['reklamer:orville'].invoke
    

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

    【讨论】:

    • 这种方法可行,但@andrew-marshall 回答了捆绑 raks 任务的“正确”方法。
    • 如果您要说“正确”的方式......请提供参考。我的回答是对原始问题的回答。
    • 作为一个理论测试,我尝试运行Rake::Task['db:seed'].invoke但它没有运行,说“不知道如何构建任务'db:seed'”
    【解决方案3】:

    你试过rake reklamer:iqmedier吗?

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

    【讨论】:

    • 我想一次运行所有任务
    【解决方案4】:

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

    require "rake"
    YourApp::Application.load_tasks
    Rake::Task["Namespace:task"].invoke
    

    【讨论】:

    • 那些引号不好,但我不能编辑它们,因为它太小了!
    • 尽管这不是对所问问题的真正答案。这就是我一直在寻找并解决了我的问题(YourApp::Application.load_tasks)。谢谢!
    【解决方案5】:

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

    在终端上运行rake --tasks

    它将列出如下所示的任务:

    rake gobble:dev:prime             
    rake gobble:dev:reset_number_of_kits                                    
    rake gobble:dev:scrub_prod_data
    

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

    【讨论】:

      【解决方案6】:

      在 Rails 4.2 中,上述方法不起作用。

      1. 前往航站楼。
      2. 将目录更改为您的 rake 文件所在的位置。
      3. 运行 rake task_name。
      4. 在上述情况下,运行 rake iqmedier - 将只运行 iqmedir 任务。
      5. run rake euroads - 将只运行 euroads 任务。
      6. 要运行该文件中的所有任务,请在 相同的文件并运行 rake all

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

      【讨论】:

        【解决方案7】:

        正如https://stackoverflow.com/a/5641807/7262646https://stackoverflow.com/a/49400110/7262646 所述

        你必须添加

        require 'rake'
        Rake::Task.clear
        YourAppName::Application.load_tasks
        

        在文件的顶部。

        YourAppName来自config/applicaion.rb,定义为命名空间,如:

        module YourAppName
          class Application < Rails::Application
          end
        end
        

        然后你就可以使用了

        Rake::Task["task_name"].invoke
        

        调用你的任务。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-15
          • 2012-07-15
          • 2016-06-03
          • 2019-04-13
          相关资源
          最近更新 更多