簡體   English   中英

更新在另一個 gem 依賴項中指定的 gem 版本

[英]update gem version that is specified in another gem dependency

在我的 Gemfile 中,我包含了一個具有 .gemspec 的 gem,它使用悲觀運算符~>來指定 gem 的版本。 但是,我需要使用更新版本的 gem。 在我的情況下,我使用的是 spree 3-0-stable,它的 activemerchant 設置為“~> 1.47.0” https://github.com/spree/spree/blob/3-0-stable/core/spree_core.gemspec #L22但我需要使用活躍商家 '~> 1.59.0'

我試圖在我的 Gemfile 中指定版本 1.59.0 但 bundle 抱怨:

您已請求:activemerchant ~> 1.59.0

該捆綁包當前已將 activemerchant 鎖定在 1.47.0。 嘗試運行bundle update activemerchant

如果您一次更新 Gemfile 中的多個 gem,請嘗試將它們全部傳遞給bundle update

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

實現此目的的 rails-y 方式是什么? 除了自己分叉狂歡和更新.gemspec? 顯然,對 activemerchant gem 的更新可能會破壞狂歡 gem。 但我可以用我的應用程序進行測試。

Bundler的維護者建議分叉相關的 gem,然后在 gem 上做一個 PR。 然后直接鏈接到Gemfile中該 PR 中的Gemfile 這鼓勵社區圍繞解決方案團結起來。

我在這里詳細記錄了這個過程:https ://github.com/rubygems/rfcs/pull/13#issuecomment-770416467

你不能這樣做,rubygems 系統不允許這樣做。 您必須為上游 gem 依賴項提交問題,並要求他們放寬要求。

可能是您想要的 activemerchant 版本實際上無法與您想要的 spree 版本一起使用,它會破壞它。 如果是這樣,則必須修復狂歡代碼才能與新版本的 activemerchant 一起使用。 或者,它可以與您想要的版本一起正常工作,spree 中的限制意外地不必要地嚴格,在這種情況下,只需要更改 spree gemspec 以允許它。

但是您無法在不更改狂歡 gemspec 的情況下覆蓋它。

您可以制作自己的狂歡分支,在其中更改 gemspec - 但不知道狂歡是否真的適用於您想要的 activemerchant 版本,這可能很危險。 現在你在你自己的 fork 上,所以你將無法升級到新版本的 spree 而不將他們的更改合並到你的 fork 等。

另一件事是,運行spree 3-0-stable分支而不是 gem 的實際發布版本有點奇怪。 但是我不熟悉 spree 的發布管理實踐,也許這就是他們所鼓勵的? 無論如何,更改此設置可能無法解決您的問題。

如果您的應用程序相對較新或比較簡單,您可以考慮從 spree 切換到solidus ,這是 spree 的一個分支。 Solidus 在 spree 2.x 上分叉,所以從 spree 3.x 遷移可能並不簡單,特別是如果您的應用程序已經建立並且有些復雜。 雖然solidus_core gem被鎖定~> 1.48.0 ,所以它也不允許除了 activemerchant 1.48.x 之外的任何東西。 solidus 團隊在他們的 Slack 頻道上非常敏感,如果你想問他們這是怎么回事,他們是否知道以后版本的 activemerchant 是否可以工作,是否可以放松依賴關系。 我發現solidus 的維護者非常敏感,並且如果可行的話,可能有興趣允許更新版本的activemerchant。 我不熟悉當前的 Spree 團隊以及他們如何與用戶溝通(如果他們有空閑時間或列表服務,或者對 github 問題有響應,或者什么),但您當然可以與他們進行相同的對話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM