在Rails中的共享命名空间内运行所有rake任务?

时间:2016-06-02 13:06:19

标签: ruby-on-rails rake

我尝试在此帖后的共享:namespace内运行rake任务列表:How do I run all rake tasks?

但它不起作用。

每篇帖子推荐

desc "perform all scraping"
task :scrape do
  Rake::Task[:scrape_nytimes].execute 
  Rake::Task[:scrape_guardian].execute 
end

我的情况不同,所有rake任务都在命名空间中。

佣金任务

namespace :get_ready do
  task check_weather: :environment do
    p 1
  end
  task make_lunch: :environment do
    p 2
  end
  task start_car: :environment do
    p 3
  end
end

尝试创建一个运行所有rake任务的rake任务,如下所示。

desc "Run all tasks"
task run_all: :environment do
  Rake::Task[:check_weather].execute 
  Rake::Task[:make_lunch].execute    
  Rake::Task[:start_car].execute       
end 

然后使用rake run_allrake get_ready投放。我试过的以下变化也没有用。

  • Rake::Task[run_all:check_weather].execute
  • Rake::Task[:run_all, :check_weather].execute

是否有人有经验在共享命名空间中运行一批rake任务并知道如何执行此操作?

2 个答案:

答案 0 :(得分:2)

应该是:

desc "Run all tasks"
task run_all: :environment do
  Rake::Task['get_ready:check_weather'].execute 
  Rake::Task['get_ready:make_lunch'].execute    
  Rake::Task['get_ready:start_car'].execute       
end

命名空间为get_readycheck_weathermake_lunchstart_car是该命名空间中的任务。

更优雅的解决方案是:

desc "Run all tasks"
task run_all_elegantly: [:environment, 'get_ready:check_weather', 'get_ready:make_lunch', 'get_ready:start_car']

答案 1 :(得分:0)

每个人都注意到rails -T或您的情况rails -T get_ready的输出吗? 它显示每个命令,并以注释形式显示说明,因此您可以通过管道传输输出并使用bash执行它:

(rails -T deploy) | /bin/bash

因此,如果您想执行所有任务,则无需执行额外的任务。