我已经阅读了文档,并查看了很多示例,但我不清楚默认值和命名空间。 (使用rake,版本10.0.3)
首先看来,虽然我不记得明确地看到这一点,但无论定义了多少,都只能有一个默认任务。显然,加载顺序(PROJECT_NAME :: Application.load_tasks)决定了胜利者。当我努力创建命名空间默认值时,我发现我有时会覆盖rails应用程序的正常默认值,其中:
rake
默认运行测试。
首先是“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,因为我已将其声明为默认
但是,如果我明确指出“默认”这个词,我就明白了:
$ 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 :(得分: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