views:

314

answers:

2

I'm attempting to use Mongoid from a plain Ruby script (not via Rails or any other framework) and I think I'm running into some version dependency conflicts:

/opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:779:in `report_activate_error': RubyGem version error: activesupport(3.0.0 not >= 2.2.2, < 3.0.pre) (Gem::LoadError)
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:214:in `activate'
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:1082:in `gem'
    from /opt/local/lib/ruby/gems/1.8/gems/mongoid-1.9.1/lib/mongoid.rb:24
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from ./rubymongo.rb:4

My local Rails has been upgraded to 3.0.0 already, and if I read the error correctly, somewhere there's a requirement saying activesupport has to be < 3.0.pre, and 3.0.0 is too new?

Is this because Rails 3.0 is brand new and maybe Mongoid has a config option somewhere with 3.0.pre defined that I need to upgrade? Where would I do that?

I used to have the old Rails still installed too, but got a different error:

/opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:233:in `activate': can't activate activesupport (>= 2.2.2, < 3.0.pre, runtime) for [], already activated activesupport-3.0.0 for ["mongoid-1.9.1"] (Gem::LoadError)
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:1082:in `gem'
    from /opt/local/lib/ruby/gems/1.8/gems/mongoid-1.9.1/lib/mongoid.rb:24
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from ./rubymongo.rb:4

If I go back to having an older activesupport installed, how do I make sure the newer one isn't being hit as well?

I'm still very new to Ruby, so please elaborate in your answer.

After upgrading to the Mongoid 2.0 beta per Simon's suggestion, I'm getting a new conflict about bson being too new:

/opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:233:in `activate': can't activate bson (= 1.0.4, runtime) for ["mongoid-2.0.0.beta.17"], already activated bson-1.0.7 for ["mongo-1.0.7", "mongoid-2.0.0.beta.17"] (Gem::LoadError)
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:249:in `activate'
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `each'
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems.rb:248:in `activate'
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:35:in `require'
    from ./rubymongo.rb:4

Why is bson 1.0.4 already loaded? Is something else trying to load it explicitly? All my simple .rb script requires is rubygems and mongoid at this point.

Here's all the gems I use that sound relevant:

actionpack (3.0.0, 2.3.8)
activemodel (3.0.0)
activerecord (3.0.0)
activeresource (3.0.0)
activesupport (3.0.0)
bson (1.0.7, 1.0.4)
bson_ext (1.0.7)
mongo (1.0.8, 1.0.7)
mongo_ext (0.19.3)
mongoid (2.0.0.beta.17)
rails (3.0.0, 2.3.8)
+1  A: 

Indeed there's a Gem version conflict.

There are two versions of mongoid available right now: * 1.9.1 stable * 2.0.0 beta

Both should work well with Rails 3. Even mongoid 1.9.1, which is a little bit more old, depends on activesupport <= 3.0.0 which means Rails 3 is a valid dependency. Perhaps, you're still working with Rails 3 RC.

I suggest you to:

  1. Make sure you changed your Gemfile to use Rails 3, regenerated your Gemfile.lock and reinstalled the dependencies

    gem "rails", 3.0.0"
    
    
    $ bundle update
    $ bundle install
    
  2. If the problem persist, try upgrading to mongoid 2.0.0 beta.

Simone Carletti
I don't think 1) is an option for me. I'm not using Rails, just a single .rb file that I run from a shell. I tried upgrading to mongoid 2.0.0, had to upgrade to bson 1.0.7, and now I'm told 'can't activate bson (= 1.0.4, runtime) for ["mongoid-2.0.0.beta.17"], already activated bson-1.0.7 for ["mongo-1.0.7", "mongoid-2.0.0.beta.17"]'. Why isn't it smart enough to not use the right version here? Is something else using 1.0.4?
Joost Schuur
+1  A: 

I think I came across the same problem. It does seem to be caused by a dependency clash. mongo 1.0.8 will pull in bson 1.0.7 but mongoid depends on bson 1.0.4 which leads to the clash. I think it all comes down to the very specific dependencies that the mongoid beta has.

I managed to get this combination of gems working together:

activemodel (3.0.0)
activesupport (3.0.0)
rails (3.0.0)
mongo (1.0.7)
mongoid (2.0.0.beta.18)
bson (1.0.4)

This meant that I had to explicitly install mongo 1.0.7 and bson 1.0.4 and uninstall the latest versions (mongo 1.0.8 and bson 1.0.7). I was then able to run a simple script.

Steve
Works like a charm!
randomguy
Unfortunately Rake (0.8.7) depends on bson (1.0.7).
randomguy