2013-02-27 154 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

相关问题