Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rake任务未按指定顺序运行子任务_Ruby On Rails_Ruby_Ruby On Rails 4_Rake_Bundler - Fatal编程技术网

Ruby on rails rake任务未按指定顺序运行子任务

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

在rails 4.2应用程序中,在Rakefile中,我有:

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以来,这个问题应该得到修复