Ruby on rails rake任务未按指定顺序运行子任务
在rails 4.2应用程序中,在Rakefile中,我有:Ruby on rails rake任务未按指定顺序运行子任务,ruby-on-rails,ruby,ruby-on-rails-4,rake,bundler,Ruby On Rails,Ruby,Ruby On Rails 4,Rake,Bundler,在rails 4.2应用程序中,在Rakefile中,我有: task(:default).clear task :default => [:test, 'bundle:audit'] 输出总是首先运行bundle:audit。为什么呢 我在一些地方读到,rake在依赖关系出现时执行任务,但bundle:audit,据我所知,并不依赖于测试。其定义如下: 引用一篇在Rake的GitHub存储库中讨论相同问题的文章: 事实证明,问题在于rails创建测试任务的方式: desc "Run t
task(:default).clear
task :default => [:test, 'bundle:audit']
输出总是首先运行bundle:audit。为什么呢
我在一些地方读到,rake在依赖关系出现时执行任务,但bundle:audit,据我所知,并不依赖于测试。其定义如下:
引用一篇在Rake的GitHub存储库中讨论相同问题的文章:
事实证明,问题在于rails创建测试任务的方式:
desc "Run tests quickly by merging all types and not resetting db"
Rails::TestTask.new(:all) do |t|
t.pattern = "test/**/*_test.rb"
end
在这里,Rails使用Rails::TestTask作为加载所有测试文件的test:all
目标
def define
task @name do
if ENV['TESTOPTS']
ARGV.replace Shellwords.split ENV['TESTOPTS']
end
libs = @libs - $LOAD_PATH
$LOAD_PATH.unshift(*libs)
file_list.each { |fl|
FileList[fl].to_a.each { |f| require File.expand_path f }
}
end
end
但与立即运行测试的Rake::TestTask不同,Rails::TestTask只需要运行测试所需的文件,然后依赖Minitest中的at_exit
处理程序来运行测试。这意味着在运行测试时完全忽略rake依赖关系
我更新了源代码的链接,因为讨论的是Rails 4.1.8,但问题仍然存在于Rails 4.2.7.1的源代码中
这个问题被报告为GitHub上的一个问题,并在中修复
这就是说:自从Rails 5.0.0以来,这个问题应该得到修复