【问题标题】:How do I run multiple Rake tasks programmatically at once?如何一次以编程方式运行多个 Rake 任务?
【发布时间】:2012-02-10 01:25:48
【问题描述】:

在命令行我可以像这样运行多个任务

rake environment task1 task2 task3

如何以编程方式执行此操作?我知道我可以像这样运行一项任务

Rake::Task['task1'].invoke

【问题讨论】:

标签: ruby rake


【解决方案1】:

你可以调用两个任务:

require 'rake'

task :task1 do |t|
  p t
end
task :task2 do |t|
  p t
end


Rake::Task["task1"].invoke
Rake::Task["task2"].invoke

我更喜欢有先决条件的新口味:

require 'rake'

task :task1 do |t|
  p t
end
task :task2 do |t|
  p t
end
desc "Common task"
task :all => [ :task1, :task2  ]
Rake::Task["all"].invoke

如果我误解了你的问题,你想执行两次相同的任务:你可以reenabletasks:

require 'rake'

task :task1 do |t|
  p t
end
Rake::Task["task1"].invoke
Rake::Task["task1"].reenable
Rake::Task["task1"].invoke

【讨论】:

  • 是的,我想我只需要一个接一个地调用两个任务。
  • 如果您多次运行同一个 rake 任务,您也可以使用.execute 而不是.invoke。 invoke 只允许调用一次,除非您使用 reenable。
【解决方案2】:

为它做一个 rake 任务:P

# in /lib/tasks/some_file.rake
namespace :myjobs do 
  desc "Doing work, son" 
  task :do_work => :environment do
    Rake::Task['resque:work'].invoke 
    start_some_other_task
  end

  def start_some_other_task
    # custom code here
  end
end

那就直接调用吧:

rake myjobs:do_work

【讨论】:

  • 我希望在不创建额外 rake 任务的情况下做到这一点。我根本没有从命令行运行,所以我必须 Rake::Task['myjobs:do_work'].invoke。我会试试这个。
  • Rake::Task['myjobs:do_work'].invoke 也可以。很高兴巩固一些东西,IMO。以后更容易维护
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
相关资源
最近更新 更多