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

时间:2017-02-13 15:03:39

标签: ruby-on-rails ruby bundler

我在how Bundler works上看过这个演示文稿,而Bundler被发明的原因之一就是解决'激活错误',例如:

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的不同版本吗?

1 个答案:

答案 0 :(得分:3)

您不能让同一个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,它应该返回什么?

创建像bundler这样的工具的原因之一是阻止意外发生 - 所以不,你不能指定2个不同版本的gem同时加载。 (另外,我认为你不会想那样做!)

另见this post,它解释了一些事情。

相关问题