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

Run all rake tasks inside a shared namespace in Rails?

我正在尝试 运行 共享 :namespace 中的 rake 任务列表 post:How do I run all rake tasks?

但是它不起作用。

根据 post

的建议
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 任务的经验并且知道如何执行此操作?

应该是:

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']

每个人都注意到 rails -T 的输出,或者在您的情况下 rails -T get_ready ? 它显示了每个命令,并将描述作为注释,因此您可以通过管道输出并使用 bash:

执行它
(rails -T deploy) | /bin/bash

所以如果你想执行所有任务,就不需要额外做一个任务。