Search code examples
ruby-on-railsrspecdrb

RSpec fails to run --bisect, with error: undefined method `run' for #<RSpec::Core::Bisect::Server>


I am currently in the process of upgrading a fairly large Rails application from Rails 3 --> Rails 4 (or maybe 5).

I am currently at a point where I have a Rails v4.0.13 application, running on Ruby v2.1.5. The test suite is running on RSpec v3.5.2, and is green (woohoo!), but unfortunately with some intermittent failures.

I'd ideally like to track down the cause of these failures before upgrading further, using rspec --bisect.

However, when I run rspec --bisect (with or without other arguments), I get the following error:

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>'

Has anyone got a clue what could be causing this, or how I may be able to track down the cause?

Some things I've tried so far, to no avail:

  • Downgrade rspec to a lower version (>= 3.3.0, since that's when --bisect was added).
  • Upgrade ruby to a higher version (namely 2.3.1). (This causes a few test failures which I'm yet to resolve, but still doesn't affect this --bisect issue).
  • Clean up the system with rvm gemset empty <project_name>; gem install bunder; bundle, to purge all the pre-upgrade library code that was lying around.

It's also worth noting that I have other Rails projects on this computer, for which running --bisect works just fine - so I don't think this can be a system library compatibility issue. I guess it must be something to do with the project configuration -- but what?! (I can't even see an application back-trace for clues??)

Edit: Without finding a resolution to this yet, I've continued upgrading the application. It is now running Rails v4.2.7 and Ruby v2.3.1, with all specs passing (but still with some ordering issue). The error message when running rspec --bisect remains unchanged.


Solution

  • This is a long shot, but do you happen to have a .rspec file?

    I was able to recreate a similar error on an empty rails project with adding spork it to. For some reason running rspec --bisect --drb provokes this issue.

    The spork documentation suggests adding --drb straight to .rspec file. So make sure that it has been removed and when you run just rspec --bisect it should work.