我可以在一个应用程序中使用两个版本的gem吗?我正在尝试使用两个rails插件一起工作:
当我在rails中尝试某些内容时,我收到此错误消息:
$ rails server
c:/Ruby187/lib/ruby/gems/1.8/gems/bundler-1.0.7/lib/bundler/resolver.rb:129:in `resolve': Bundler could not find compatible versions for gem "oauth": (Bundler::VersionConflict)
In snapshot (Gemfile.lock):
oauth (0.4.4)
In Gemfile:
linkedin depends on
oauth (~> 0.3.5)
Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
尝试捆绑更新只会冻结我的终端
是否可以同时使用这两个插件?
答案 0 :(得分:12)
使用单个gem的两个版本通常意味着:使用同一类的两个版本。
如果不对这些宝石进行修改,这是不可能的。您可以尝试将创建的类放在某个模块中,解决导入到其他类中的方法中的冲突,等等。一般来说,这不是一件容易的事,通常效果不值得。
在这种情况下你应该做的是要求gem维护者更新依赖关系,或者尝试自己做。
也许您可以将这些宝石中的一个降级(使用旧版本)到依赖关系相同的版本。
答案 1 :(得分:3)
不幸的是,在Ruby中,唯一的方法是修复(原文如此!)那些宝石,因此它们使用兼容的依赖项
一般来说,在Ruby中构建复杂的软件并且遇到这种情况时,我们 - Ruby开发人员 - 做不了多少。这非常糟糕,因为Ruby的开发也必须关注这个问题。
不必为客户提供新功能或更改请求,而是必须使用Ruby,即:#34; gem hell"。
宝石地狱的另一个主要特征"并不总是最新的宝石发布是好的。
其他编程语言可以选择处理这些类型的问题。只需搜索" java同一类的多个版本"而且你会发现很多资源。
我对小型应用程序的建议是:
对于更大类型的应用程序我可以建议什么,当上述情况不适用时:
将您的应用程序拆分为几个较小的应用程序服务。 这将使他们分开冒险拥有"宝石地狱"小。如果它发生,很可能不会发生所有这些。 此外,不同的应用程序可以使用不同的宝石版本。
切换到JRuby,理论上可以通过Java功能解决这些问题