【问题标题】:Mongoid/activesupport version problemMongoid/activesupport版本问题
【发布时间】:2010-08-31 11:43:57
【问题描述】:

我正在尝试从普通的 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 必须

这是因为 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 脚本只需要 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)

【问题讨论】:

  • 非常好的问题!我遇到了类似的情况。我只是想与 Rails 分开做一些基准测试。 Steve Hook 的建议效果很好。

标签: ruby mongodb mongoid


【解决方案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)。然后我就可以运行一个简单的脚本了。

【讨论】:

  • 不幸的是,Rake (0.8.7) 依赖于 bson (1.0.7)。
  • 我遇到了同样的问题,只是版本号较新。
【解决方案2】:

确实存在 Gem 版本冲突。

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

两者都应该适用于 Rails 3。即使是更旧的 mongoid 1.9.1,也依赖于activesupport &lt;= 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) 对我来说是一个选择。我没有使用 Rails,只是我从 shell 运行的单个 .rb 文件。我尝试升级到 mongoid 2.0.0,不得不升级到 bson 1.0.7,现在我被告知'无法为 ["mongoid-2.0.0.beta.17 激活 bson (= 1.0.4, runtime) "],已经为 ["mongo-1.0.7", "mongoid-2.0.0.beta.17"]' 激活了 bson-1.0.7。为什么在这里不使用正确的版本不够聪明?使用 1.0.4 有什么别的吗?
猜你喜欢
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多