2016-05-22 60 views
1

在我的Gemfile中,我包含一個具有.gemspec的gem,它使用悲觀運算符~>來指定gem的版本。不過,我需要使用更新版本的寶石。在我的情況下,我使用狂歡3-0穩定,有活動商人設置爲'〜> 1.47.0'https://github.com/spree/spree/blob/3-0-stable/core/spree_core.gemspec#L22但我需要使用活動商人'〜> 1.59.0'在另一個gem依賴項中指定的更新gem版本

我試圖指定版本1.59。 0在我的Gemfile,但束抱怨有:

你已申請: activemerchant〜> 1.59.0

束目前已在1.47.0 activemerchant鎖定。嘗試運行 bundle update activemerchant

如果你在你的Gemfile更新多個寶石同時,嘗試通過 他們都bundle update

但命令bundle update activemerchant只更新到1.47.x.

完成此操作的rails-y方法是什麼?除了分叉自己和更新.gemspec?顯然更新主動的商人寶石可能會打破狂熱寶石。但我可以用我的應用程序進行測試。

+4

據我所知,分叉是唯一的方法。 –

+0

我不認爲你可以同時在你的應用中使用同一個gem的兩個版本。 Bundler將強制解析爲一個版本。 –

回答

0

你不能這樣做,rubygems系統不允許這樣做。您必須爲上游gem相關性提出問題,並要求他們放寬其要求。

這可能是因爲你想要的activemerchant版本實際上並不適用於你想要的spree版本,它會破壞它。如果是這樣,瘋狂代碼將不得不被修復以使用新版本的activemerchant。或者,它可以在你想要的版本上正常工作,狂熱的限制意外的是非常嚴格,在這種情況下,狂熱的gemspec只需要改變就可以了。

但是沒有辦法讓你覆蓋它而不改變狂熱gemspec。

你可以製作你自己的改變gemspec的spree分叉 - 但不知道spree是否真的能與你想要的activemerchant版本一起工作,這可能是危險的。現在你在自己的岔道上,所以你將無法升級到新版本的熱潮,而無需將它們的更改合併到叉子等。

另一件事是,運行有點奇怪關閉spree 3-0-stable分支,而不是實際發佈的版本的寶石。但我不熟悉狂歡的發佈管理實踐,也許這是他們鼓勵的?無論如何,改變這可能不會解決你的問題。

如果您的應用程序相對較新或較簡單,則可考慮從spree切換到solidus,這是一個狂歡分支。雖然Solidus在spree 2.x版本中已經發布,但從3.x版本遷移可能並不容易,特別是如果您的應用程序已經建立並且有點複雜。儘管solidus_core gem is also locked以有效商人~> 1.48.0,所以它也不會允許任何東西,但主動商販1.48.x.如果你想問他們怎麼了,如果他們知道活動商人的後續版本是否可以工作,如果依賴關係可以放鬆,那麼solidus團隊對他們的Slack頻道的反應非常敏感。我發現solidus維護人員的響應速度非常快,並且如果可行的話,可能會對允許更新版本的主動商人感興趣。我對當前的Spree團隊不熟悉,以及他們如何與用戶進行交流(如果他們有一個懶散的,或者listserv,或者對github問題有反應,或者是什麼),但是你當然可以和他們進行相同的對話。