Зависимости задач всегда запускаются в определенном порядке с помощью rake? - PullRequest
10 голосов
/ 17 марта 2011

У меня есть следующий пример, основанный на структуре, которую я хочу использовать в моем 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

Будут ли задачи всегда выполняться в одном и том же порядке? Я где-то читал, что нет, а где-то еще, поэтому я не уверен.

Или, если вы можете предложить лучший способ сделать то, что я пытаюсь достичь (например, иметь общий шаг инициализации и очистки, окружающий шаг в зависимости от среды), это также было бы хорошо.

Спасибо

1 Ответ

16 голосов
/ 17 марта 2011

Из исходного кода Rake:

# 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

Таким образом, вы правы, оба могут быть верными, но порядок может быть отключен только в том случае, если вы добавите к своей задаче префикс multitask Похоже, что обычные задачи выполняются по порядку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...