2010-12-02 18 views
14

1つのアプリケーションで2つのバージョンのgemを使用できますか?私は一緒に仕事するために、2つのレールのプラグインを使用しようとしている:同時に2つのバージョンのgemを使用する

  1. PengwynnのLinkedInのhttps://github.com/pengwynn/linkedinは、LinkedInのAPI呼び出しのために、よく複数を介してユーザのログイン用のOAuthへの依存性(〜> 0.3.5)
  2. OmniAuthを持っていますただバンドル更新をしようと

    $ rails server 
    c:/Ruby187/lib/ruby/gems/1.8/gems/bundler-1.0.7/lib/bundler/resolver.rb:129:in `resolve': Bundler could not find compatible versions for gem "oauth": (Bundler::VersionConflict) 
        In snapshot (Gemfile.lock): 
        oauth (0.4.4) 
    
        In Gemfile: 
        linkedin depends on 
         oauth (~> 0.3.5) 
    
    Running `bundle update` will rebuild your snapshot from scratch, using only 
    the gems in your Gemfile, which may resolve the conflict. 
    

    :私はレールに何かをしようとすると知られているウェブサイトは、私はこのエラーメッセージを取得するのOAuth 0.4.0

に依存しています私の端末をフリーズする

これらのプラグインを同時に使用することはできますか?

答えて

11

1つの宝石の2つのバージョンを使用することは、通常、同じクラスの2つのバージョンを使用することを意味します。

これらの宝石に変更を加えることはできません。作成したクラスをモジュールに配置したり、他のクラスにインポートされたメソッドの競合を解決したりすることがあります。一般的に、それは簡単な仕事ではなく、通常効果はそれに値するものではありません。

あなたがとする場合は、は、宝石保守担当者に依存関係を更新するよう依頼するか、自分でやり直してください。

これらの宝石のうちの1つを、依存関係が同じバージョンにダウングレードすることができます(古いバージョンを使用することもできます)。生憎

+0

おかげで、私は今の両方を使用しようとして悩ま停止します。 –

2

、Rubyでの唯一の方法は、修正(原文のまま!)これらの宝石にあるので、Rubyで複雑なソフトウェアを構築し、我々、このような状況にあるとき、彼らは、互換性の依存関係一般に

を使用する - Rubyの開発者 - あまりできない。 Rubyの開発もこの問題に焦点を当てなければならないので、これは本当に悪いことです。

お客様に新しい機能や変更要求を提供する代わりに、いわゆる「gem hell」と呼ばれるRubyを使用する必要があります。

「宝石地獄」のもう一つの大きな特徴は、必ずしも最新の宝石のリリースが良いものではないということです。

  • 多くの場合、宝石はセマンティックバージョニングポリシーに従わず、主なAPIの変更を導入することがあります。
  • 多くの場合、新しいgemリリースでは、以前に動作していた機能に新しいバグが導入されることがあります。

他のプログラミング言語には、これらのタイプの問題を処理するオプションがあります。 「同じクラスの複数のバージョンのJava」を検索するだけで、たくさんのリソースが見つかります。私は、アプリケーションの小さい種類の提案することができますどのような

があるに:

  • も最新のすべての最新の宝石のリリース
  • 私はアプリケーションの大きな種類の提案することができますどのような

と、上記のオプションがない場合:

  • アプリケーションをいくつかの小さなアプリケーション、サービスに分割します。 これはそれらを分けて、「宝石地獄」を小さくするリスクを負わせます。それが起こった場合、それはすべてに起こらない可能性があります。 また、さまざまなアプリで異なる宝石のバージョンを使用できます。理論的には - - これらの問題をすることができたJRubyへ

  • スイッチのJava機能を経由して解決し、あなたの答えのための

+0

あなたはjrubyがどのように役立つかを指摘してください:JRubyに切り替えてください。これらの問題は理論上はJavaの能力によって解決できます。 – whizcreed

+0

トマシュ、私の最近の質問を見てください:https://stackoverflow.com/questions/28233471/unable-to-use-surveyor-gem多分私の地獄は比較的管理しています。 – whizcreed

+0

Javaではカスタムクラスローダーを持つことができます。つまり、同じクラスの複数のバージョンを読み込むことができます。これは理論です。 私はこのアイデアの実用的な使用が見つかりませんでした。 OSGiがありましたが、これは他のJava標準に賛成して放棄されたようです。 JRubyは両方の方法が混在しているので、道があるとは思っていましたが、誰かがこの道を行くかどうかはわかりません... –

関連する問題