2011-11-10 67 views
24

在定義Rake任務,它是可以使用的命名空間,就像這樣:如何在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

哦,你從我這裏得到一個+1,因爲例子實際上是相同的,以我的使用情況:) – conny

+0

@conny - 我可以來你在哪裏工作的工作? :D –

回答

31

您已經找到解決方案(名稱爲字符串)。

您可以擴展此答案。不需要用符號定義名稱空間和任務。你可以使用字符串。

這樣做,您可以使用相同的類型定義和使用任務名稱。

你舉的例子是這樣的:

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

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

想通了

你只需要給名字作爲一個字符串,像這樣:

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

這也可能起作用,它仍然是一個符號:':'拆除:fire_bazooka'' – mikeycgto

+1

您也可以在符號中使用單引號,例如:':'拆除:fire_bazooka''。 – mipadi

+0

你也可以將一個字符串轉換成一個符號,用''拆除:firebazooka'.to_sym' - 這不一定比前面的評論好得多,但它確實有助於傳達正在發生的事情的想法。 –

相關問題