我有一个关于耙multitask
的问题。我遇到了这些答案,这些使我开始Question 1 Question 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
关于如何运行这些任务的其他建议(无论是否同时进行)将不胜感激。以及您在这种情况下对最佳实践的任何指导(经验或阅读资源)将大有帮助。
谢谢。
答案 0 :(得分:0)
如果您想坚持使用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。。这首先会重置任务的has_invoked状态,然后可以再次执行任务,依赖项和所有任务:
Rake::Task['namespace:task'].reenable
Rake::Task['namespace:task'].invoke
您可以使用Rake::Task['namespace:task'].invoke
或Rake::Task['namespace:task'].execute
在加载的Rails环境中执行rake任务
因此,在以上总结之后,我认为您可以尝试执行方法。像下面这样,做任何你想做的事。
Rake::Task['namespace:task'].execute(your_argument)
有关更多信息:https://medium.com/@sampatbadhe/rake-task-invoke-or-execute-419cd689c3bd
希望这会对您有所帮助:)