如何从Rake任务中运行Rake任务?
我有一个根据全局变量$build_type
编译项目的$build_type
,它可以是:debug
或:release
(结果放在不同的目录中):
task :build => [:some_other_tasks] do
end
我希望创建一个能够依次用两种配置编译项目的任务,如下所示:
task :build_all do
[ :debug, :release ].each do |t|
$build_type = t
# call task :build with all the tasks it depends on (?)
end
end
有没有办法像调用方法一样调用任务? 或者我怎样才能达到类似的目的?
如果你需要这个任务作为一个方法,那么使用一个实际的方法怎么样?
task :build => [:some_other_tasks] do
build
end
task :build_all do
[:debug, :release].each { |t| build t }
end
def build(type = :debug)
# ...
end
如果你愿意坚持使用rake
的成语,以下是你的可能性,从过去的答案编译而来:
这总是执行任务,但它不执行它的依赖关系:
Rake::Task["build"].execute
这个执行依赖关系,但它只在任务尚未被调用时执行:
Rake::Task["build"].invoke
这首先重置任务的already_invoked状态,允许任务再次执行,依赖关系和所有:
Rake::Task["build"].reenable
Rake::Task["build"].invoke
(请注意,已经调用的依赖关系不会被重新执行)
例如:
Rake::Task["db:migrate"].invoke
task :build_all do
[ :debug, :release ].each do |t|
$build_type = t
Rake::Task["build"].reenable
Rake::Task["build"].invoke
end
end
这应该把你排除在外,我自己也需要同样的东西。
链接地址: http://www.djcxy.com/p/30301.html