当前位置:  开发笔记 > 后端 > 正文

如何从Rake任务中运行Rake任务?

如何解决《如何从Rake任务中运行Rake任务?》经验,为你挑选了5个好方法。

我已经编译在两个方面项目Rake文件,根据全局变量$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

有没有办法将任务称为方法?或者我怎样才能达到类似的效果呢?



1> kch..:

如果您需要将任务作为一种方法,那么使用实际方法呢?

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

(请注意,已经调用的依赖项不会被重新执行)


如果问题中的任务采用参数,则可以将它们作为参数传递给#invoke.例如.`耙::任务[ '与:ARGS']调用( "比萨饼")`.
请注意,如果您的任务位于名称空间中,则必须在调用任务时包含名称空间.例如.`瑞克::任务[ '分贝:复位'] invoke`.
如果需要设置环境变量,请在调用invoke之前执行此操作.例如:`ENV ['VERSION'] ='20110408170816'; Rake :: Task ['db:migrate'].invoke`有关详细说明,请参阅[here](http://rubyforge.org/pipermail/rake-devel/2009-January/000712.html).
我最近发现`#reenable()`没有重新启用pre-req,需要它.[此添加](https://github.com/jimweirich/rake/pull/168)到Rake(> = 10.3.2),[`#all_prerequisite_tasks()`](http://ruby-doc.org/ stdlib-2.1.1/libdoc/rake/rdoc/Rake/Task.html#method-i-all_prerequisite_tasks)将迭代所有任务,包括pre-req的pre-req.所以,`Rake :: Task [task] .all_prerequisite_tasks.each&:reenable`
@kch,你能把它们串在一起吗(比如命令行`rake db:reset db:migrate`).你可以这样做:`Rake :: Task ["db:reset","db:migrate"].invoke`

2> Marcin Urban..:

例如:

Rake::Task["db:migrate"].invoke


仅当尚未调用任务时,才会调用该任务.但是我需要用两次依赖的所有其他任务来调用任务.

3> 小智..:
task :build_all do
  [ :debug, :release ].each do |t|
    $build_type = t
    Rake::Task["build"].reenable
    Rake::Task["build"].invoke
  end
end

那应该把你排除在外,只需要自己做同样的事情.



4> pjb3..:
task :build_all do
  [ :debug, :release ].each do |t|
    $build_type = t
    Rake::Task["build"].execute
  end
end



5> 小智..:
task :invoke_another_task do
  # some code
  Rake::Task["another:task"].invoke
end

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有