How to run Rake tasks from within Rake tasks?
我有一个rakefile,它以两种方式编译项目,根据全局变量
1 2 | task :build => [:some_other_tasks] do end |
我希望创建一个任务,用这两种配置依次编译项目,如下所示:
1 2 3 4 5 6 | task :build_all do [ :debug, :release ].each do |t| $build_type = t # call task :build with all the tasks it depends on (?) end end |
有没有一种方法可以像调用方法一样调用任务?或者我怎样才能实现类似的目标?
如果你需要对任务的行为的方法,一种使用目前的方法如何?
1 2 3 4 5 6 7 8 9 10 11 | task :build => [:some_other_tasks] do build end task :build_all do [:debug, :release].each { |t| build t } end def build(type = :debug) # ... end |
如果你宁愿坚持到
-
这executes任务总是在运行,但它是不是它的限制:
1Rake::Task["build"].execute -
这一executes的限制,但它的工作,如果只executes它已不是已经被。
1Rake::Task["build"].invoke -
在这一resets任务已经被_’s状态的任务,让。再次被执行,和所有的限制:
1
2Rake::Task["build"].reenable
Rake::Task["build"].invoke(这是没有限制的通知已被重新执行)
例如:
1 | Rake::Task["db:migrate"].invoke |
1 2 3 4 5 6 7 | task :build_all do [ :debug, :release ].each do |t| $build_type = t Rake::Task["build"].reenable Rake::Task["build"].invoke end end |
这就需要你要排序的东西出来,我自己。
1 2 3 4 5 6 | task :build_all do [ :debug, :release ].each do |t| $build_type = t Rake::Task["build"].execute end end |
1 2 3 4 | task :invoke_another_task do # some code Rake::Task["another:task"].invoke end |
如果你想要每个任务运行的任何故障,无论什么样的,你可以:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | task :build_all do [:debug, :release].each do |t| ts = 0 begin Rake::Task["build"].invoke(t) rescue ts = 1 next ensure Rake::Task["build"].reenable # If you need to reenable end return ts # Return exit code 1 if any failed, 0 if all success end end |
我会suggest不是一般的调试任务的创建和释放的东西,如果真的把编译好的工程文件和操作系统的方法。你应该去与这是更可行的文件在您的工作的例子,你去你的国家,这是输出到不同的目录。说你只是在test.c文件到项目compiles 10 / 10 /调试/发行/ test.out test.out和你可以设置你的项目与GCC这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | WAYS = ['debug', 'release'] FLAGS = {} FLAGS['debug'] = '-g' FLAGS['release'] = '-O' def out_dir(way) File.join('out', way) end def out_file(way) File.join(out_dir(way), 'test.out') end WAYS.each do |way| desc"create output directory for #{way}" directory out_dir(way) desc"build in the #{way}-way" file out_file(way) => [out_dir(way), 'test.c'] do |t| sh"gcc #{FLAGS[way]} -c test.c -o #{t.name}" end end desc 'build all ways' task :all => WAYS.map{|way|out_file(way)} task :default => [:all] |
安装程序可以使用这个类。
1 2 3 | rake all # (builds debug and release) rake debug # (builds only debug) rake release # (builds only release) |
这是不小的问题会更多,但我的重点: