Mongoid / activesupport版本问题

时间:2010-08-31 11:43:57

标签: ruby mongodb mongoid

我试图从普通的Ruby脚本(不是通过Rails或任何其他框架)使用Mongoid,我想我遇到了一些版本依赖性冲突:

/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

我的本​​地Rails已经升级到3.0.0,如果我正确地读取了错误,那么就需要说activeSupport必须是&lt; 3.0.pre和3.0.0太新了?

这是因为Rails 3.0是全新的,也许Mongoid有一个配置选项,3.0.pre定义了我需要升级吗?我会在哪里做到这一点?

我曾经也安装过旧的Rails,但是出现了不同的错误:

/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

如果我回到安装旧版的activesupport,我该如何确保新版本没有被点击?

我还是Ruby的新手,所以请详细说明你的答案。

根据Simon的建议升级到Mongoid 2.0测试版后,我发现了一个关于bson太新的冲突:

/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

为什么bson 1.0.4已经加载?是否有其他东西试图明确加载它?我所有简单的.rb脚本需要的是rubygems和mongoid。

以下是我使用的所有与之相关的宝石:

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)

2 个答案:

答案 0 :(得分:1)

确实存在Gem版本冲突。

目前有两种版本的mongoid可用: * 1.9.1 stable * 2.0.0 beta

两者都应该适用于Rails 3.甚至mongoid 1.9.1,这有点旧,取决于activesupport <= 3.0.0,这意味着Rails 3是一个有效的依赖。 也许,你还在使用Rails 3 RC。

我建议你:

  1. 确保更改Gemfile以使用Rails 3,重新生成Gemfile.lock并重新安装依赖项

    gem "rails", 3.0.0"
    
    $ bundle update
    $ bundle install
    
  2. 如果问题仍然存在,请尝试升级到mongoid 2.0.0 beta版。

答案 1 :(得分:1)

我想我遇到了同样的问题。它似乎确实是由依赖冲突造成的。 mongo 1.0.8将拉入bson 1.0.7,但是mongoid取决于bson 1.0.4,这导致了冲突。我认为这完全取决于mongoid beta具有的非常具体的依赖性。

我设法让这些宝石组合起来:

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)

这意味着我必须显式安装mongo 1.0.7和bson 1.0.4并卸载最新版本(mongo 1.0.8和bson 1.0.7)。然后我就能运行一个简单的脚本。