使用Rails 3,我想弄清楚我覺得應該是很簡單的...2寶石需要不同版本的同一依賴
我有2顆寶石需要2個不同版本的同一寶石依賴。依賴gem的兩個版本都安裝在我的系統上,但我仍然從Rails得到一個錯誤:「Bundler找不到gem XXX的兼容版本」。
處理這種情況的最佳做法是什麼?
使用Rails 3,我想弄清楚我覺得應該是很簡單的...2寶石需要不同版本的同一依賴
我有2顆寶石需要2個不同版本的同一寶石依賴。依賴gem的兩個版本都安裝在我的系統上,但我仍然從Rails得到一個錯誤:「Bundler找不到gem XXX的兼容版本」。
處理這種情況的最佳做法是什麼?
我會去爲@BaroqueBobcat建議的。我只想補充一點 - 如果你需要最新的Twitter Gem,不能等待Groupon2的維護人員更新他的寶石 - 你可以在GitHub上分發Groupon2,更新它的gemspec,通過運行它的測試來看它是否仍然有效(並嘗試修復它,如果它不),幷包括你自己的版本使用其Git URL在你的Gemfile中像這樣:gem「groupon2」,::git =>「https://github.com/yourgithubuser/groupon2.git 」。
如果你想對我好,你可以加分:) pull請求
您不必在Github上分發它 - 您可以在本地克隆它並在Gemfile中指定路徑。 – Nakilon 2017-10-26 11:29:55
如果你不需要Twitter gem版本1.4.1的所有功能,你可以使用版本1.2.0,這需要法拉第〜> 0.5.4。這應該可行。如果沒有,你可以嘗試 戳groupon2的主人來更新他的寶石 - 這是在github https://github.com/gangster/groupon2 。
如果您處於不同項目中使用寶石的情況,或者至少不是在同一時間使用寶石,則可以使用RVM的gemset功能作爲解決方法。我最近有一種類似於你的寶石不兼容性,這就是我用過的。
如果您已經安裝了RVM,這樣做:
rvm gemset create gemset_name_here
rvm gemset use gemset_name_here
那麼你正在做的是創造一個寶石的環境,是完全新鮮的,並從頭開始,同時仍然能夠恢復到你工作的寶石與之前在任何時間。第一行創建一個新的gemset,第二行告訴RVM開始使用它。
在這一點上,你需要運行bundle install
或耙子或任何你用來獲得你需要的寶石,但這應該照顧到這個問題。
因此,當您使用具有依賴關係1的gem 1時,您使用具有所需版本的gemset。然後當你使用依賴2的gem 2時,你切換到那個gemset。
現在,如果這兩個gem都是一個大項目的一部分,這將是不可行的,並且您很可能需要編輯gem的源代碼以運行新版本的依賴項,如@BaroqueBobcat所述。在很多情況下,這實際上很容易。 Ruby開發人員很容易讓代碼易於理解。
bundle update
化解矛盾
'bundle update'尊重依賴性,所以它不會解決任何衝突。 – 2017-08-01 07:24:30
我有同樣的問題,但在不同的上下文:編寫使用兩個不同版本的HASHIE依賴(1.2.0和3.1.0)
我的應用進入Gemfile.lock並在圓括號(1.2.0)中指定舊版本,運行軟件包安裝,並且它工作。
哪些寶石有衝突? – BaroqueBobcat 2011-05-26 00:26:07
Twitter的寶石(要求法拉第0.6.1)Groupon2寶石(要求法拉第0.5.7)。 – ericalli 2011-05-26 00:28:31