2016-05-22 32 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问题有反应,或者是什么),但是你当然可以和他们进行相同的对话。

相关问题