Bundler - 无法加载完全相同 gem 的 2 个不同版本?

Bundler - cannot load 2 different versions of the exact same gem?

我在 how Bundler works 上看过这个演示文稿,发明 Bundler 的原因之一是解决 'activation errors',例如:

LoadError: can't activate rack (~> 1.0.0, runtime) for ['actonpack-2.3.5'], already activated rack-1.1.0 for ['thin-1.2.7']

这是否基本上意味着您不能在单个 Ruby 进程中同时 运行 完全相同 gem 的 2 个不同版本?

您不能让同一个 gem 的两个不同版本加载同一个程序,因为它们可能会发生冲突并覆盖彼此的方法。例如,假设您有一个包含以下内容的 gem:

# In gem version 1.0
class AneMaria
  def self.name
    "Ane"
  end
end

######

# In gem version 2.0
class AneMaria
  def self.name
    "Maria"
  end
end

然后在你的代码中,如果你调用 AneMaria.name,它应该是什么 return??

创建 bundler 等工具的原因之一是 防止 意外发生——所以不,你不能指定一个 [= 的 2 个不同版本24=] 同时加载。 (另外,我不认为你会想要那样做!)

另请参阅 this post,其中解释得更多一些。