使用Rails 3,我试图找出我认为应该非常直接的内容......
我有2个宝石需要2个不同版本的相同gem依赖项。两个版本的依赖gem都安装在我的系统上,但我仍然从Rails得到错误:“Bundler找不到gem XXX的兼容版本。”
处理这样的场景的最佳做法是什么?
答案 0 :(得分:9)
我会选择@BaroqueBobcat建议的内容。我只想补充一点 - 如果你需要最新的Twitter gem并且不能等待Groupon2的维护者更新他的gem - 你可以在GitHub上分叉Groupon2,更新它的gemspec,看它是否仍然可以通过运行它的测试(并尝试修复它,如果没有)并在你的Gemfile中使用它的Git URL包含你自己的版本,如:gem“groupon2”,:git => “https://github.com/yourgithubuser/groupon2.git”。
如果你想变得更好,你可以通过拉取积分请求向Groupon2的维护者提供你的更改:)
答案 1 :(得分:3)
如果您不需要Twitter gem版本1.4.1的所有功能,您可以使用版本1.2.0,这需要法拉第〜> 0.5.4。这应该工作。如果没有,你可以试试 戳了groupon2的所有者更新他的宝石 - 它在github上https://github.com/gangster/groupon2
答案 2 :(得分:1)
我遇到了同样的问题,但是在不同的环境中:编写一个使用两个不同版本的hashie依赖项的应用程序(1.2.0和3.1.0)
我进入了Gemfile.lock,并在括号hashie(1.2.0)中指定了旧版本,运行了bundle install,它运行良好。
答案 3 :(得分:0)
如果您处于不同项目中使用宝石的情况,或者至少不是在同一时间,您可以使用RVM的宝石集功能作为解决方法。我最近有一个类似于你的宝石不兼容性,这就是我使用的。
如果安装了RVM,请执行以下操作:
rvm gemset create gemset_name_here
rvm gemset use gemset_name_here
所以你正在做的是创建一个完全新鲜且从头开始的宝石环境,同时仍然能够在任何时候恢复到你以前使用过的宝石。第一行创建一个新的gemset,第二行告诉RVM开始使用它。
此时你需要运行bundle install
或rake或者你正在使用的任何东西来获得你需要的宝石,但是这应该解决这个问题。
因此,当您使用具有依赖关系1的gem 1时,您将使用具有所需版本的gemset。然后,当你使用带有依赖关系2的gem 2时,你切换到具有该值的gemset。
现在,如果两个宝石都是一个较大项目的一部分,这将是不可行的,你很可能需要编辑gem的源代码来运行新版本的依赖项,如@BaroqueBobcat所说。在很多情况下,这实际上非常简单。 Ruby开发人员在使代码易于使用方面往往非常棒。
答案 4 :(得分:-1)
看看这个解决方案,也许它会对你有所帮助:gems
答案 5 :(得分:-3)
bundle update
解决冲突