2010-12-02 48 views
14

我可以在一個應用程序中使用兩個寶石版本嗎?我試圖用兩個Rails插件一起工作:同時使用2個版本的寶石

  1. Pengwynn的LinkedIn https://github.com/pengwynn/linkedin對LinkedIn的API調用,對OAuth的
  2. OmniAuth經由多個良好用戶登錄的相關性(〜> 0.3.5)知名網站,對OAuth的0.4.0

的依賴性,當我在軌嘗試一些我收到此錯誤信息:

$ 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. 

只是想包更新凍結我的終端

是否有可能在同一時間使用這些插件都?

回答

11

使用單一寶石的兩個版本通常意味着:使用同一類的兩個版本。

如果不修改這些寶石,這是不可能的。您可以嘗試將創建的類放在某個模塊中,解決導入其他類的方法中的衝突等等。一般來說,這不是一件容易的事,通常效果不值得。

應該你在這種情況下做的是要求寶石維護人員更新依賴關係,或嘗試自己做。

也許你可以降級(使用舊版本的)這些寶石之一,在其依賴關係是相同的版本。

+0

謝謝您的回答解決,我會停止與試圖使用現在都困擾。 – 2010-12-07 09:31:22

2

可惜的是,在Ruby中的唯一方法是修復(原文如此)的寶石,所以他們使用兼容的依賴性

在一般情況下,在Ruby中構建複雜的軟件,並具有這樣的情況,當我們 - Ruby開發者 - 不能做太多。這真的很糟糕,因爲Ruby的開發也必須關注這個問題。

而是提供客戶新的功能或變更請求的,人們必須忍受紅寶石所謂:「寶石地獄」。

「寶石地獄」的另一大特點是,並不總是最新的創業板發行是好的。

  • 通常,寶石不遵循語義版本策略,並且可能會引入主要的API修改。
  • 通常情況下,新的寶石版本可能會引入新的bug到以前的功能。

其他編程語言有處理這類問題的選項。只需搜索「同一類的Java多個版本」,你就會發現很多資源。

我可以建議爲小類型的應用是什麼:

  • 高達最新與所有最新的寶石版本

我可以建議對於較大類型的應用,當上述不是選項時:

  • 將您的應用程序拆分爲幾個較小的應用程序服務。 這會將他們分開,使得「寶石地獄」變小的風險。如果真的發生了,那麼偶然發生的可能不是全部。 此外,不同的應用程序可以使用不同的寶石版本。

  • 切換到JRuby的在那裏這些問題可能是 - 在理論上 - 通過Java功能

+0

您能否指出jruby如何提供幫助:切換到JRuby,這些問題可以在理論上通過Java功能解決。 – whizcreed 2015-01-30 10:55:31