【问题标题】:Bundler - cannot load 2 different versions of the exact same gem?Bundler - 无法加载完全相同的 gem 的 2 个不同版本?
【发布时间】:2017-02-14 17:05:11
【问题描述】:

我在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 的 2 个不同版本?

【问题讨论】:

    标签: ruby-on-rails ruby bundler


    【解决方案1】:

    您不能让同一个 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,它解释了一些事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多