1

(Rails やその他のフレームワークではなく) プレーンな Ruby スクリプトから 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

以前のアクティブ サポートをインストールした状態に戻った場合、新しいアクティブ サポートも影響を受けないようにするにはどうすればよいですか?

私はまだ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)
4

2 に答える 2

1

私は同じ問題に遭遇したと思います。依存関係の衝突が原因のようです。mongo 1.0.8 は bson 1.0.7 を取り込みますが、mongoid は bson 1.0.4 に依存しているため、衝突が発生します。それはすべて、mongoid ベータ版が持つ非常に具体的な依存関係に帰着すると思います。

この宝石の組み合わせをうまく連携させることができました。

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 に答える
1

確かに、Gem バージョンの競合があります。

現在利用可能な mongoid には 2 つのバージョンがあります: * 1.9.1 安定版 * 2.0.0 ベータ版

いずれも Rails 3 でうまく動作するはずです。もう少し古い mongoid 1.9.1 でさえ、activesupport <= 3.0.0Rails 3 が有効な依存関係であるかどうかによって異なります。おそらく、あなたはまだ Rails 3 RC を使用しています。

次のことをお勧めします。

  1. Rails 3を使用するようにGemfileを変更し、Gemfile.lockを再生成し、依存関係を再インストールしたことを確認してください

    gem "rails", 3.0.0"
    
    $ bundle update
    $ bundle install
    
  2. 問題が解決しない場合は、mongoid 2.0.0 ベータ版にアップグレードしてみてください。

于 2010-08-31T15:13:14.130 に答える