使用Rails 3,我试图找出我认为应该非常简单的东西。。。
我有两个gem,需要两个不同版本的相同gem依赖项。依赖gem的两个版本都安装在我的系统上,但我仍然从Rails中得到一个错误:"Bundler找不到gemXXX的兼容版本"。
处理这种情况的最佳实践是什么?
我会接受@BaroqueBobcat的建议。我只想补充一点,如果你需要最新的Twitter gem,并且迫不及待地想让Groupon2的维护者更新他的gem,你可以在GitHub上分叉Groupon2,更新它的gemspec,通过运行测试看看它是否仍然有效(如果没有,试着修复它),并在你的Gemfile中包含你自己的版本,使用它的Git URL,如下:gem"Groupon2",:Git=>"https://github.com/yourgithubuser/groupon2.git".
如果你想表现得好一点,你可以向Groupon2的维护者提供你的更改,并请求获得奖励积分:)
如果你不需要Twittergem1.4.1版本的所有功能,你可以使用1.2.0版本,它需要faraday~>0.5.4。这应该行得通。如果没有,你可以试试戳groupon2的所有者更新他的gem——它在github上https://github.com/gangster/groupon2.
我遇到了同样的问题,但在不同的上下文中:编写一个使用两个不同版本的哈希依赖项(1.2.0和3.1.0)的应用程序
我进入Gemfile.lock,在括号中指定了旧版本的hashie(1.2.0),运行了bundle安装,它就工作了。
如果您在不同的项目中使用gem,或者至少不在同一时间使用,您可以使用RVM的gemset功能作为解决方法。我最近有一个类似于你的宝石不兼容,这就是我使用的。
如果您安装了RVM,请执行以下操作:
rvm gemset create gemset_name_here
rvm gemset use gemset_name_here
因此,您正在做的是创建一个全新的、从头开始的gem环境,同时仍然可以随时恢复到以前使用的gem。第一行创建一个新的宝石集,第二行告诉RVM开始使用它
在这一点上,你需要运行bundle install
或rake或任何你正在使用的东西来获得你需要的宝石,但这应该可以解决问题。
因此,当您使用具有依赖项1的gem1时,您将使用具有所需版本的gemset。然后,当您使用具有依赖项2的gem2时,您可以切换到具有该依赖项的gemset。
现在,如果两个gem都是一个更大项目的一部分,这将是不可行的,你很可能需要编辑gem的源代码来运行新版本的依赖项,就像@BaroqueBobcat说的那样。在很多情况下,这其实很容易。Ruby开发人员往往非常擅长让他们的代码变得容易上手。
看看这个解决方案,也许它会对您有所帮助:gems
bundle update
解决冲突