微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 任务依赖是否始终以耙子的特定顺序运行?

我有以下示例是基于我想要我的rakefile使用的结构:
task :default do
    puts 'Tasks you can run: dev,stage,prod'
end

task :dev => [:init,:devrun,:clean]
task :devrun do
    puts 'Dev stuff'
end

task :stage => [:init,:stagerun,:clean]
task :stagerun do
    puts 'Staging stuff'
end

task :prod => [:init,:prodrun,:clean]
task :prodrun do
    puts 'Production stuff'
end

task :init do
    puts 'Init...'
end

task :clean do
    puts 'Cleanup'
end

任务总是按照相同的顺序运行吗?我读到某个地方,他们不会,还有别的地方,所以我不知道.

或者,如果您可以建议一个更好的方法来做我正在尝试实现的(例如,有一个常见的初始化和清理步骤围绕依赖环境的步骤),那也是很好的.

谢谢

解决方法

从耙源码:
# Invoke all the prerequisites of a task.
def invoke_prerequisites(task_args,invocation_chain) # :nodoc:
  @prerequisites.each { |n|
    prereq = application[n,@scope]
    prereq_args = task_args.new_scope(prereq.arg_names)
    prereq.invoke_with_call_chain(prereq_args,invocation_chain)
  }
end

所以看起来,代码通常只是迭代数组并顺序运行必备任务.

然而:

# Declare a task that performs its prerequisites in parallel. Multitasks does
# *not* guarantee that its prerequisites will execute in any given order
# (which is obvIoUs when you think about it)
#
# Example:
#   multitask :deploy => [:deploy_gem,:deploy_rdoc]
#
def multitask(args,&block)
  Rake::MultiTask.define_task(args,&block)
end

所以你是对的,都可以是真的,但是只有在你的任务前面加上多任务的时候,命令才能被关掉它看起来像是常规的任务按顺序运行.

原文地址:https://www.jb51.cc/ruby/266103.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐