1

我正在尝试从普通的 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 必须 < 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 beta 后,我遇到了一个关于 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 脚本需要的是 ruby​​gems 和 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)
4

2 回答 2

1

确实存在 Gem 版本冲突。

目前有两个版本的 mongoid:* 1.9.1 稳定版 * 2.0.0 测试版

两者都应该适用于 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。

于 2010-08-31T15:13:14.130 回答
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)。然后我能够运行一个简单的脚本。

于 2010-09-15T18:05:55.937 回答