2013-02-27 149 views
4

我已經通讀了文檔並查看了很多示例,但我對默認和名稱空間並不清楚。 (使用rake,版本10.0.3)Rake默認任務和名稱空間

首先,雖然我不記得明確地看到這一點,但無論定義了多少個,都只能有一個默認任務。顯然加載順序(PROJECT_NAME :: Application.load_tasks)決定了贏家。當我一直在努力建立一個命名空間的默認我發現,我有時覆蓋了一個Rails應用程序正常默認其中:

rake 

默認運行測試。

首先這裏是「耙-T」命令:

$ rake -T a_name 
rake a_name:a_task_1   # a_task_1 
rake a_name:a_task_2   # a_task_2 
rake a_name:b_name:b_task_1 # b_task_1 
rake a_name:b_name:b_task_2 # b_task_2 
rake a_name:default   # This is hopefully a namespaced default 

當我運行僅我希望是「默認」我得到的命名空間:

$ rake a_name 
rake aborted! 
Don't know how to build task 'a_name' 

(See full trace by running task with --trace) 

我期待這是爲了運行b_name命名空間中的b_task_1,因爲我已經聲明它是默認的

但是,如果我明確地指向單詞「default」,我會得到:

$ rake a_name:default 
a_task_1 

無論如何,我徹底困惑。誰能幫助澄清這對我來說...

namespace :a_name do 

    desc "a_task_1" 
    task :a_task_1 do 
    puts "a_task_1" 
    end 

    desc "a_task_2" 
    task :a_task_2 do 
    puts "a_task_2" 
    end 

    namespace :b_name do 

    desc "b_task_1" 
    task :b_task_1 do 
     puts "b_task_1" 
    end 

    desc "b_task_2" 
     task :b_task_2 do 
    puts "b_task_2" 
    end 

    end 

    desc "This is hopefully a namespaced default" 
    task :default => 'b_name:b_task_1' 
end 
+0

你看到了嗎?這是一個稍微不同的方法,但它似乎工作http://stackoverflow.com/questions/1579231/default-task-for-namespace-in-rake – 2013-03-04 23:33:18

回答

10

您可以定義具有相同名稱的命名空間的任務。它不像在我認爲的命名空間中定義默認任務那麼好。

desc "runs bar & baz in foo" 
task foo: ["foo:bar", "foo:baz"] 

namespace :foo do 
    desc "bar in foo" 
    task :bar do 
    puts "bar" 
    end 

    desc "baz in foo" 
    task :baz do 
    puts "baz" 
    end 
end 

這就是他們是如何被列出:

rake foo        # runs bar & baz in foo 
rake foo:bar       # bar in foo 
rake foo:baz       # baz in foo 
+0

經過更多的嘗試,我自己這基本上是我想出了。所以在這一點上,我認爲這是實現我想要的最好方式, – danv 2013-03-05 18:28:42

相關問題