Rake 任务可能运行两次的原因有很多,在这种特定情况下,我认为这可能与 Rake 环境加载多次有关,正如链接的问题@kucaahbe https://stackoverflow.com/users/692969/kucaahbe建议。
我实际上是来这里寻求帮助的,但我的问题不同,我设法找到了答案。我认为这不会对这个特定问题有帮助,但我也将其留在这里。
确保您的 Rake 环境仅加载一次
继@kucaahbe 链接的问题 https://stackoverflow.com/questions/35875661/rake-task-executing-twice-when-only-called-once#comment69648259_35875661,这表明如果您的环境正在加载和初始化 Rake 两次,就会发生这种情况。
在 Rake 任务运行的上下文中rake
已被要求并初始化,因此请确保您的任务不包含以下行:
require 'rake'
...
Rake.application.init
Rake.application.load_rakefile
在这种特定情况下,任务似乎没有做任何类似的事情,所以我会检查其他任务或Rakefile
强制 Rake 上下文加载两次的原因。
在重新定义之前清除预先存在的任务
刚刚遇到这个问题是由于 gem 创建了同名的 Rake 任务。
例如,如果您在 Rails 应用程序中声明以下任务:
namespace :assets do
task :precompile do
puts "Hello"
end
end
and run rake assets:precompile
:
...
I, [2017-07-31T11:25:09.498897 #9455] INFO -- : Writing /home/pfac/...css.gz
Hello
Hello
但如果你使用Rake::Task#clear https://github.com/ruby/rake/blob/master/lib/rake/task.rb#L146:
namespace :assets do
task(:precompile).clear
task :precompile do
puts "Hello"
end
end
它禁用任何预先存在的行为并仅打印Hello
.
我认为这个选项不能解决这个特定问题,除非@broc-西兰花 https://stackoverflow.com/users/4456032/broc-broccoli一直在定义其他foo:bar
耙任务。
无论如何,希望这会有所帮助。