使用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