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

31

在定义rake任务时,可以像这样使用命名空间:

namespace :demolition do
  task :fire_bazooka do
    puts "kaboom!"
  end
end
这可以被称为rake demolition:fire_bazooka
还可以像这样为任务指定前置条件:
# Single prerequisite
task :fire_bazooka => :load_bazooka do ....

# Multiple prerequisites
task :fire_bazooka => [:safety_check, :load_bazooka]

但是我该如何将带有命名空间的任务用作前提条件?很明显,以下代码不能正常工作:

task :photograph_destruction => :demolition:fire_bazooka

4
你得到了我的加一,因为这些例子几乎和我使用的情况完全相同。 - conny
@conny - 我能来你工作的地方工作吗? :D - Nathan Long
2个回答

36

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

您可以扩展此答案。没有必要使用符号定义命名空间和任务。您可以使用字符串。

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

您的示例看起来像这样:

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

task 'photograph_destruction' => "demolition:fire_bazooka" do
  puts "snapping pics! yay!"
end

12

问题已解决

你只需要将名称作为字符串给出,就像这样:

task :photograph_destruction => "demolition:fire_bazooka" do
  puts "snapping pics! yay!"
end

更新

正如@mikeycgto和@mipadi所指出的那样,引用符号(请注意前导:)也可以起作用:

task :photograph_destruction => :'demolition:fire_bazooka' do
  puts "snapping pics! yay!"
end

1
这个也可能起作用,而且它仍然是一个符号::'demolition:fire_bazooka' - mikeycgto
1
你也可以在符号中使用单引号,例如::'demolition:fire_bazooka' - mipadi
你也可以使用'demolition:firebazooka'.to_sym将字符串转换为符号。虽然这并没有比前面的注释更好,但它确实有助于传达正在发生的事情的想法。 - Steve Midgley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接