我想要的是这样的:
gem 'rack', '1.3.3', '1.2.4'
因此,当宝石需要不同版本的机架时,它们都会被安抚。这可能吗?
答案 0 :(得分:13)
不,您无法同时加载多个gem版本。这是因为,当knut突出显示时,代码会发生冲突。宝石如何知道使用Rack的1.2.4
版本而不是1.3.3
版本的Rack?它不能。
另外:使用Bundler,必须满足所有gem依赖项才能完成捆绑过程。如果你有一个明确要求 Rack 1.2.4的宝石(即= 1.2.4
在该宝石的gemspec
中),那么另一个需要Rack版本的宝石如>= 1.3
然后这些宝石版本会发生冲突,而Bundler会告诉你。
答案 1 :(得分:11)
您可以设置允许的宝石间隔
gem 'rack', '<1.3.3', '>1.2.4'
它将在所选的intervall中加载最实际的一个。
但我认为你不能要求不同的宝石版本。 如果gem将以不同的版本加载,则每个类和模块必须获得它自己的命名空间,以避免覆盖gem的方法。
答案 2 :(得分:3)
我遇到了这个问题,因为我想将某些破损的上游宝石版本列入黑名单。虽然你做不到
gem 'rack', '1.3.3', '1.2.4'
你可以有多个!=
约束来排除你知道存在问题的版本:
gem 'rack', '!= 1.3.0.beta2', '!= 1.3.0.beta'