繁体   English   中英

在rake任务中调用具有多个任务的多个rake任务

[英]Invoking multiple rake tasks with multi-task within a rake task

我有一个关于rake multitask的问题。 我遇到了这些答案,这使我开始思考问题1 问题2 我只是想确保我不会丢失某些东西,因为我无法使它正常工作。 我有任务import:locations ,它只是调用其他任务的包装。

namespace :import do
  desc "import locations"
  task :locations, [:context] => :environment do |t, args|

    # Used for printing if tasks fail
    if !args[:context].nil?
      args[:context][:task] = 'IMPORTING_LOCATIONS'
    end

    locs = LocationCSV.load_locations # Parse locations once

    Rake::Task["locations:branches"].invoke(args[:context], locs)
    Rake::Task["locations:venues"].invoke(args[:context], locs)

    Uploader.slack_text("Finished import:locations.")

  end
end

看来我可以使用multitask任务并行运行这两个任务。 问题是我无法正确调用语法。

Rake::MultiTask['locations:branches','locations:venues'].(args[:context], locs)

我有点迷茫,因为我试图将解析的位置传递到每个任务中(它只是位置哈希值,详细说明了场所和分支所匹配的位置)。 是否可以通过这种方式调用这两个任务? 我想念什么? 在其他rake任务中被调用时,正确的multitask语法是什么?

我的主要任务如下所示:

namespace :import do
  desc "import all data"
  task :locations, [:context] => :environment do |t, args|


    Rake::Task["import:customers"].invoke
    Rake::Task["import:locations"].invoke # where I want the multitask above to occur

    Uploader.slack_text("Finished the import.")

  end
end

任何其他有关如何运行这些任务的建议(无论是否同时进行)将不胜感激。 以及您在这种情况下对最佳实践的任何指导(经验或阅读资源)将大有帮助。

谢谢。

如果您愿意坚持使用rake的惯用语,则可以使用以下方法:

例:

namespace :namespace do
  desc "Example description."
  task :task, [:param] => :environment do |t, args|
    puts args[:param]
    ...
  end
end

1.这始终执行任务,但不执行其依赖项:

Rake::Task['namespace:task'].execute

2.这将执行依赖关系,但仅在尚未被调用的情况下才执行任务:

Rake::Task['namespace:task'].invoke

3.这首先会重置任务的“已经调用”状态,然后允许再次执行任务,依赖项和所有任务:

Rake::Task['namespace:task'].reenable
Rake::Task['namespace:task'].invoke

您可以使用Rake::Task['namespace:task'].invokeRake::Task['namespace:task'].execute在加载的Rails环境中执行rake任务Rake::Task['namespace:task'].execute

因此,结束以上讨论后,我认为您可以尝试执行方法。 像下面一样,随心所欲。

Rake::Task['namespace:task'].execute(your_argument)

有关更多信息: https : //medium.com/@sampatbadhe/rake-task-invoke-or-execute-419cd689c3bd

希望这个能对您有所帮助 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM