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

tim*_*xyz 5 rake ruby-on-rails

:namespace我正在尝试在以下帖子的共享中运行 rake 任务列表: How do I run all raketasks?

但它不起作用。

每个帖子的推荐

desc "perform all scraping"
task :scrape do
  Rake::Task[:scrape_nytimes].execute 
  Rake::Task[:scrape_guardian].execute 
end
Run Code Online (Sandbox Code Playgroud)

我的情况的不同之处在于所有 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
Run Code Online (Sandbox Code Playgroud)

尝试创建一个运行所有 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 
Run Code Online (Sandbox Code Playgroud)

然后用rake run_all或运行rake get_ready。我尝试过的以下变体也不起作用。

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

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

iam*_*mdi 5

它应该是:

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
Run Code Online (Sandbox Code Playgroud)

命名空间 是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']
Run Code Online (Sandbox Code Playgroud)