Rspec 1.3.2, Rails 2.3.14 - plugins not loading

Hi there

I have a weird situation. I have inherited a project in Rails 1.2.3
that has been upgraded to Rails 2.3.14 (and is running). I have
installed Cucumber and Rspec to start to write features/tests for the
new code that needs to be written. In my Gemfile, these Gems are
loaded:

group :test do
gem ‘rspec-rails’, ‘~> 1.3.4’, :require => ‘spec/rails’
gem ‘rspec’, ‘~> 1.3.2’, :require => ‘spec’
gem “capybara”, “0.3.9”
gem “cucumber”, “0.9.4”
gem “cucumber-rails”, “0.3.2”
gem ‘database_cleaner’
end

When I run the specs (bundle exec spec spec), I get error messages
because the plugins of the application aren’t loaded.

Indeed, if I bundle the gems in "group :test, :development do ", then
script/server and script/console fail to start as well because the
plugins aren’t loaded.

Anyone seen this problem or can give me a hint of why the plugins
suddenly aren’t loaded (and where I should poke to find the cause)?

thanks
Jens-Christian

On 18 Oct 2011, at 15:02, Jens-Christian F. wrote:

gem ‘rspec’, ‘~> 1.3.2’, :require => ‘spec’
script/server and script/console fail to start as well because the
plugins aren’t loaded.

Anyone seen this problem or can give me a hint of why the plugins
suddenly aren’t loaded (and where I should poke to find the cause)?

thanks
Jens-Christian

My guess is that, because this is an older Rails app, it doesn’t use
Bundler as you’d expect. In a Rails 3 app, your config/application.rb
will have something like this near the top:

Bundler.require(:default, Rails.env) if defined?(Bundler)

That’s the magic that tells Bundler to require all the plugins for the
test environment when you run the tests. You’ll need to stick something
like that into your Rails 1 app.

One other problem you’ll probably hit: Capybara won’t work with Rails
apps that old, so you’ll need to use Webrat for integration testing
instead.

cheers,
Matt


Freelance programmer & coach
Author, Search (with Aslak
Hellesy)
Founder, http://relishapp.com
+44(0)7974430184 | http://twitter.com/mattwynne

On 21 October 2011 10:26, Matt W. [email protected] wrote:

because the plugins of the application aren’t loaded.

My guess is that, because this is an older Rails app, it doesn’t use Bundler as
you’d expect. In a Rails 3 app, your config/application.rb will have something
like this near the top:

Bundler.require(:default, Rails.env) if defined?(Bundler)

That’s the magic that tells Bundler to require all the plugins for the test
environment when you run the tests. You’ll need to stick something like that into
your Rails 1 app.

One other problem you’ll probably hit: Capybara won’t work with Rails apps that
old, so you’ll need to use Webrat for integration testing instead.

The op said the app had been upgraded to 2.3.14 which supports
capybara (has rack). The Rails 2.3.12 that (for my sins) I’m currently
working on has some code near the bottom of config/boot.rb to load
bundler.

class Rails::Boot
def run
load_initializer

Rails::Initializer.class_eval do
  def load_gems
    @bundler_loaded ||= begin
      result = Bundler.require :default
      Bundler.require(Rails.env) unless Rails.env.test?
      result
    end
  end
end

Rails::Initializer.run(:set_load_path)

end
end

HTH

All best

Andrew


rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Thanks for all the hints. I’m pretty sure however, that Bundler ist
NOT the issue. Both boot.rb and config/preinitializer.rb are as
expected and the app itself starts fine both with script/server or
script/console.

However, as soon as rspec is loaded (when running the tests), then the
plugins aren’t loaded anymore. A wild guess is that Rspec causes the
loading of plugins to fail in mysterious ways, but I don’t enough of
either the Rails 2.3 booting process nor the Rspec magic to pinpoint
the location where I should put my finger on.

Any further ideas that I could look into?

thanks
jc

On Oct 21, 2011, at 11:05 AM, Andrew P. wrote:

loaded:
When I run the specs (bundle exec spec spec), I get error messages
Jens-Christian
capybara (has rack). The Rails 2.3.12 that (for my sins) I’m currently
@bundler_loaded ||= begin

HTH

If Bundler is the issue, you have to have followed these
instructions(probably where the snippet above came from) to get things
set up with Rails 2.3

http://gembundler.com/rails23.html

-lenny

On 24 October 2011 09:12, Jens-Christian F. [email protected]
wrote:

Any further ideas that I could look into?

Its far more likely that your application is wrong than RSpec is
wrong, especially with an effect that is so large.
You don’t really know much about your application (you stated that
you’ve only just inherited it.
Something odd is going on with bundler (you stated that in your original
post.

Best advice I can give is question your assumptions and assume you
have made a mistake - generally when something doesn’t work its
usually my fault :slight_smile: After that creating a new rails project with the
same gemset (ideally using RVM) might help isolate the issue. Also
publishing the error messages in a gist, or even publishing the whole
project on Github might help.

All best

Andrew

that has been upgraded to Rails 2.3.14 (and is running). I have
gem ‘database_cleaner’
suddenly aren’t loaded (and where I should poke to find the cause)?
One other problem you’ll probably hit: Capybara won’t work with Rails apps
that old, so you’ll need to use Webrat for integration testing instead.
Rails::Initializer.class_eval do
end

rspec-users mailing list

Ok - I have created a brand new Rails 2.3.14 app, made it bundler
aware (as of Gem Bundler – Manage your Ruby gems) and installed one
plugin.
This reproduces the problem described above.
Here’s the app: (it does nothing, the only change is the use of the
“history” DSL keyword in application controller. History is coming
from the “rails_history” plugin):
GitHub - jcfischer/rails2314_rspec_plugin: Show a problem with rails 2.3.14, rspec 1.3.2 and plugins
If I enable rspec in Gemfile for the development environment, this is
what I get:
➜ l_p_test git:(master) ✗ script/server=> Booting WEBrick=> Rails
2.3.14 application starting on http://0.0.0.0:3000NOTE:
Gem.source_index is deprecated, use Specification. It will be removed
on or after 2011-11-01.Gem.source_index called from /Users/jcf/.rvm/
gems/ruby-1.8.7-p352@bla/gems/rails-2.3.14/lib/rails/gem_dependency.rb:
21./Users/jcf/dev/work/LENA/l_p_test/app/controllers/
application_controller.rb:13: undefined method history' for ApplicationController:Class (NoMethodError) from /Users/jcf/.rvm/gems/ ruby-1.8.7-p352@bla/gems/activesupport-2.3.14/lib/active_support/ dependencies.rb:406:in load_without_new_constant_marking’ from /Users/
jcf/.rvm/gems/ruby-1.8.7-p352@bla/gems/activesupport-2.3.14/lib/
active_support/dependencies.rb:406:in load_file' from /Users/jcf/.rvm/ gems/ruby-1.8.7-p352@bla/gems/activesupport-2.3.14/lib/active_support/ dependencies.rb:547:in new_constants_in’ from /Users/jcf/.rvm/gems/
ruby-1.8.7-p352@bla/gems/activesupport-2.3.14/lib/active_support/
dependencies.rb:405:in load_file' from /Users/jcf/.rvm/gems/ ruby-1.8.7-p352@bla/gems/activesupport-2.3.14/lib/active_support/ dependencies.rb:285:in require_or_load’ from /Users/jcf/.rvm/gems/
ruby-1.8.7-p352@bla/gems/activesupport-2.3.14/lib/active_support/
dependencies.rb:250:in depend_on' from /Users/jcf/.rvm/gems/ ruby-1.8.7-p352@bla/gems/activesupport-2.3.14/lib/active_support/ dependencies.rb:162:in require_dependency’ from /Users/jcf/.rvm/gems/
ruby-1.8.7-p352@bla/gems/rspec-rails-1.3.4/lib/spec/rails.rb:2 from /
Users/jcf/.rvm/gems/ruby-1.8.7-p352@global/gems/bundler-1.0.18/lib/
bundler/runtime.rb:68:in require' from /Users/jcf/.rvm/gems/ ruby-1.8.7-p352@global/gems/bundler-1.0.18/lib/bundler/runtime.rb: 68:in require’ from /Users/jcf/.rvm/gems/ruby-1.8.7-p352@global/gems/
bundler-1.0.18/lib/bundler/runtime.rb:66:in each' from /Users/ jcf/.rvm/gems/ruby-1.8.7-p352@global/gems/bundler-1.0.18/lib/bundler/ runtime.rb:66:in require’ from /Users/jcf/.rvm/gems/ruby-1.8.7-
p352@global/gems/bundler-1.0.18/lib/bundler/runtime.rb:55:in each' from /Users/jcf/.rvm/gems/ruby-1.8.7-p352@global/gems/bundler-1.0.18/ lib/bundler/runtime.rb:55:in require’ from /Users/jcf/.rvm/gems/
ruby-1.8.7-p352@global/gems/bundler-1.0.18/lib/bundler.rb:120:in
require' from /Users/jcf/dev/work/LENA/l_p_test/config/boot.rb:119:in load_gems’ from /Users/jcf/.rvm/gems/ruby-1.8.7-p352@bla/gems/
rails-2.3.14/lib/initializer.rb:164:in process' from /Users/jcf/.rvm/ gems/ruby-1.8.7-p352@bla/gems/rails-2.3.14/lib/initializer.rb:113:in send’ from /Users/jcf/.rvm/gems/ruby-1.8.7-p352@bla/gems/rails-2.3.14/
lib/initializer.rb:113:in run' from /Users/jcf/dev/work/LENA/l_p_test/ config/environment.rb:9 from /Users/jcf/.rvm/gems/ruby-1.8.7-p352@bla/ gems/activesupport-2.3.14/lib/active_support/dependencies.rb:182:in require’ from /Users/jcf/.rvm/gems/ruby-1.8.7-p352@bla/gems/
activesupport-2.3.14/lib/active_support/dependencies.rb:182:in
require' from /Users/jcf/.rvm/gems/ruby-1.8.7-p352@bla/gems/ activesupport-2.3.14/lib/active_support/dependencies.rb:547:in new_constants_in’ from /Users/jcf/.rvm/gems/ruby-1.8.7-p352@bla/gems/
activesupport-2.3.14/lib/active_support/dependencies.rb:182:in
require' from /Users/jcf/.rvm/gems/ruby-1.8.7-p352@bla/gems/ rails-2.3.14/lib/commands/server.rb:84 from script/server:3:in require’ from script/server:3
If rspec is disabled, then the server starts fine
So, while I understand the “your application is wrong” approach, I
think I have just successfully eliminated that possibility.
cheersjc

Ha - I think I found the problem:

In my Gemfile I had:

group :test, :cucumber do # , :development (till we work out why
plugins don’t load with rspec)
gem ‘rspec-rails’, ‘~> 1.3.4’ , :require => ‘spec/rails’
gem ‘rspec’, ‘~> 1.3.2’, :require => ‘spec’
gem “capybara”, “0.3.9”
gem “cucumber”, “0.9.4”
gem “cucumber-rails”, “0.3.2”
gem ‘database_cleaner’
end

removing the :require => … lines seemed to fix the problem

So you were right - it was all my fault :wink:

thanks for prodding me in the right direction.

cheers
jc

On 26 October 2011 16:16, Jens-Christian F. [email protected]
wrote:

gem “cucumber-rails”, “0.3.2”
jc
your welcome

all best

Andrew


rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users