你能在Gemfile中拥有多个版本的gem吗?

Jer*_*ith 11 ruby rubygems bundler

我想要的是这样的:

gem 'rack', '1.3.3', '1.2.4'
Run Code Online (Sandbox Code Playgroud)

因此,当宝石需要不同版本的机架时,它们都是安抚的.这可能吗?

Rya*_*igg 13

不,您无法同时加载多个gem版本.这是因为,当knut突出显示时,代码会发生冲突.宝石如何知道使用1.2.4Rack版本而不是1.3.3Rack版本?它不能.

另外:使用Bundler,必须满足所有gem依赖关系才能完成捆绑过程.如果你有一个明确需要 Rack 1.2.4 的gem (即= 1.2.4gemspecfor gem中),然后另一个需要Rack版本的gem,>= 1.3那么这些gem版本会发生冲突,Bundler会告诉你.


knu*_*nut 11

您可以设置允许的宝石间隔

gem 'rack', '<1.3.3', '>1.2.4'
Run Code Online (Sandbox Code Playgroud)

它将在所选的intervall中加载最实际的一个.

但我不认为你可以要求不同的宝石版本.如果gem将以不同的版本加载,则每个类和模块必须获得它自己的命名空间,以避免覆盖gem的方法.