如何在Rake任务依赖项中使用命名空间?

Nat*_*ong 28 ruby rake namespaces

在定义rake任务时,可以使用名称空间,如下所示:

namespace :demolition do
  task :fire_bazooka do
    puts "kaboom!"
  end
end
Run Code Online (Sandbox Code Playgroud)

这可以称为rake demolition:fire_bazooka.

也可以为任务指定先决条件,如下所示:

# Single prerequisite
task :fire_bazooka => :load_bazooka do ....

# Multiple prerequisites
task :fire_bazooka => [:safety_check, :load_bazooka]
Run Code Online (Sandbox Code Playgroud)

但是,如何使用命名空间任务作为先决条件?显然,这不起作用:

task :photograph_destruction => :demolition:fire_bazooka
Run Code Online (Sandbox Code Playgroud)

knu*_*nut 33

您已经找到了解决方案(名称为字符串).

你可以扩展这个答案.无需使用符号定义名称空间和任务.你可以使用字符串.

这样做,您可以获得相同类型的优势来定义和使用任务名称.

您的示例如下所示:

namespace 'demolition' do
  task 'fire_bazooka' do
    puts "kaboom!"
  end
end

task 'photograph_destruction' => "demolition:fire_bazooka" do
  puts "snapping pics! yay!"
end
Run Code Online (Sandbox Code Playgroud)


Nat*_*ong 12

弄清楚了

你只需要将名称作为字符串,如下所示:

task :photograph_destruction => "demolition:fire_bazooka" do
  puts "snapping pics! yay!"
end
Run Code Online (Sandbox Code Playgroud)

更新

正如@mikeycgto和@mipadi指出的那样,带引号的符号(注意领先:)也可以起作用:

task :photograph_destruction => :'demolition:fire_bazooka' do
  puts "snapping pics! yay!"
end
Run Code Online (Sandbox Code Playgroud)