Forum: RSpec rspec 1.3.2, Rails 2.3.14 - plugins not loading

Posted by Jens-Christian Fischer (Guest)
on 2011-10-21 05:59
(Received via mailing list)
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
Posted by Matt Wynne (mattwynne)
on 2011-10-21 11:54
(Received via mailing list)
On 18 Oct 2011, at 15:02, Jens-Christian Fischer 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, http://pragprog.com/book/hwcuc/the-cucumber-book (with Aslak 
Hellesy)
Founder, http://relishapp.com
+44(0)7974430184 | http://twitter.com/mattwynne
Posted by Andrew Premdas (Guest)
on 2011-10-21 17:20
(Received via mailing list)
On 21 October 2011 10:26, Matt Wynne <matt@mattwynne.net> 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
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>



--
Posted by Lenny Marks (Guest)
on 2011-10-21 23:27
(Received via mailing list)
On Oct 21, 2011, at 11:05 AM, Andrew Premdas 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
Posted by Jens-Christian Fischer (Guest)
on 2011-10-24 10:35
(Received via mailing list)
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
Posted by Andrew Premdas (Guest)
on 2011-10-24 12:29
(Received via mailing list)
On 24 October 2011 09:12, Jens-Christian Fischer <jcfischer@gmail.com> 
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 :) 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
>
--
Posted by Jens-Christian Fischer (Guest)
on 2011-10-26 17:18
(Received via mailing list)
Ok - I have created a brand new Rails 2.3.14 app, made it bundler
aware (as of http://gembundler.com/rails23.html) 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): 
https://github.com/jcfischer/rails2314_rspec_plugin
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
Posted by Jens-Christian Fischer (Guest)
on 2011-10-26 17:57
(Received via mailing list)
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 ;)

thanks for prodding me in the right direction.

cheers
jc
Posted by Andrew Premdas (Guest)
on 2011-10-28 21:55
(Received via mailing list)
On 26 October 2011 16:16, Jens-Christian Fischer <jcfischer@gmail.com> 
wrote:
> gem "cucumber-rails", "0.3.2"
> jc
your welcome

all best

Andrew
> _______________________________________________
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>



--
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.