【问题标题】:Run all rake tasks inside a shared namespace in Rails?在 Rails 的共享命名空间内运行所有 rake 任务?
【发布时间】:2016-10-02 05:52:35
【问题描述】:

我正在尝试在共享的: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 任务都在一个命名空间中。

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 任务的经验并且知道如何做到这一点?

【问题讨论】:

    标签: ruby-on-rails rake


    【解决方案1】:

    应该是:

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

    【讨论】:

      【解决方案2】:

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

      (rails -T deploy) | /bin/bash
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多