我目前正在从 Rails 3 升级一个相当大的 Rails 应用程序——> Rails 4(或者可能是 5)。
我目前正处于我有一个Rails v4.0.13
应用程序运行在Ruby v2.1.5
. 测试套件正在运行RSpec v3.5.2
,并且是绿色的(哇哦!),但不幸的是出现了一些间歇性故障。
理想情况下,我希望在进一步升级之前使用rspec --bisect追踪这些失败的原因。
但是,当我运行rspec --bisect
(带或不带其他参数)时,我收到以下错误:
Bisect started using options: ""
Running suite to find failures...
Bisect failed! Failed to get results from the spec run. Spec run output:
(druby://127.0.0.1:33858) /home/tom/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1588:in `perform_without_block': undefined method `run' for #<RSpec::Core::Bisect::Server:0x00000001e71430> (NoMethodError)
from (druby://127.0.0.1:33858) /home/tom/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1548:in `perform'
from (druby://127.0.0.1:33858) /home/tom/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1626:in `block (2 levels) in main_loop'
from (druby://127.0.0.1:33858) /home/tom/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1622:in `loop'
from (druby://127.0.0.1:33858) /home/tom/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1622:in `block in main_loop'
from /home/tom/.rvm/gems/ruby-2.1.5@<project-name>/gems/rspec-core-3.5.2/lib/rspec/core/drb.rb:23:in `run'
from /home/tom/.rvm/gems/ruby-2.1.5@<project-name>/gems/rspec-core-3.5.2/lib/rspec/core/invocations.rb:19:in `call'
from /home/tom/.rvm/gems/ruby-2.1.5@<project-name>/gems/rspec-core-3.5.2/lib/rspec/core/runner.rb:69:in `run'
from /home/tom/.rvm/gems/ruby-2.1.5@<project-name>/gems/rspec-core-3.5.2/lib/rspec/core/runner.rb:45:in `invoke'
from /home/tom/.rvm/gems/ruby-2.1.5@<project-name>/gems/rspec-core-3.5.2/exe/rspec:4:in `<main>'
有没有人知道可能导致这种情况的原因,或者我如何能够找到原因?
到目前为止,我尝试了一些事情,但无济于事:
- 将 rspec 降级到较低版本(
>= 3.3.0
,因为那--bisect
是添加的时间)。 - 将 ruby 升级到更高版本(即
2.3.1
)。(这会导致一些我尚未解决的测试失败,但仍然不会影响这个--bisect
问题)。 - 使用 ,清理系统
rvm gemset empty <project_name>; gem install bunder; bundle
以清除周围的所有升级前库代码。
还值得注意的是,我在这台计算机上还有其他Rails 项目,它们运行--bisect
得很好——所以我不认为这可能是系统库兼容性问题。我想这一定与项目配置有关——但是什么?!(我什至看不到应用程序回溯的线索??)
编辑:还没有找到解决方案,我继续升级应用程序。它现在正在运行Rails v4.2.7
,Ruby v2.3.1
并且所有规格都通过了(但仍然存在一些订购问题)。运行时的错误信息rspec --bisect
保持不变。