【问题标题】:2 gems need different versions of the same dependency2 个 gem 需要相同依赖项的不同版本
【发布时间】:2011-09-02 05:07:31
【问题描述】:

使用 Rails 3,我试图找出我认为应该非常简单的东西......

我有 2 个 gem,它们需要相同 gem 依赖项的 2 个不同版本。我的系统上安装了两个版本的依赖 gem,但我仍然从 Rails 收到错误:“Bundler 找不到 gem XXX 的兼容版本”。

处理这种情况的最佳做法是什么?

【问题讨论】:

  • Twitter gem(需要 faraday 0.6.1) Groupon2 gem(需要 faraday 0.5.7)。

标签: ruby-on-rails ruby ruby-on-rails-3 rubygems gem


【解决方案1】:

如果你不需要 Twitter gem 1.4.1 版的所有功能,你可以使用 1.2.0 版,它需要 faraday ~> 0.5.4。这应该有效。如果没有,你可以试试 戳 groupon2 的所有者来更新他的 gem——它在 github 上 https://github.com/gangster/groupon2 .

【讨论】:

    【解决方案2】:

    我会按照@BaroqueBobcat 的建议去做。我只想补充一点——如果你需要最新的 Twitter gem 并且不能等待 Groupon2 的维护者更新他的 gem——你可以在 GitHub 上 fork Groupon2,更新它的 gemspec,通过运行它的测试看看它是否仍然有效(如果没有,请尝试修复它)并在您的 Gemfile 中使用其 Git URL 包含您自己的版本,如下所示: gem "groupon2", :git => "https://github.com/yourgithubuser/groupon2.git ”。

    如果你想变得更好,你可以向 Groupon2 的维护者提供你的更改,并请求奖励积分:)

    【讨论】:

    • 你不必在 Github 上 fork ——你可以在本地克隆它并在 Gemfile 中指定路径。
    【解决方案3】:

    看看这个解决方案,也许对你有帮助:gems

    【讨论】:

    • 链接的答案是关于宝石组的;这不是解决依赖冲突的有用信息。
    【解决方案4】:

    如果您的 gems 被用于不同的项目,或者至少不是同时使用,您可以使用 RVM 的 gemset 功能作为解决方法。我最近遇到了与您类似的 gem 不兼容问题,这就是我使用的。

    如果您安装了 RVM,请执行以下操作:

    rvm gemset create gemset_name_here
    rvm gemset use gemset_name_here
    

    因此,您要做的是创建一个全新的、从头开始的 gem 环境,同时仍然能够随时恢复到您之前使用的 gem。第一行创建一个新的 gemset,第二行告诉 RVM 开始使用它。

    此时,您需要运行 bundle install 或 rake 或任何您正在使用的方法来获取所需的宝石,但这应该可以解决问题。

    因此,当您使用 gem 1 和依赖项 1 时,您将使用具有所需版本的 gemset。然后,当您将 gem 2 与依赖项 2 一起使用时,您将切换到具有该依赖项的 gemset。

    现在,如果两个 gem 都是一个更大项目的一部分,这将是不可行的,您很可能需要编辑 gem 的源代码来运行新版本的依赖项,就像 @BaroqueBobcat 说的那样。在很多情况下,这实际上很容易。 Ruby 开发人员往往非常擅长让他们的代码易于上手。

    【讨论】:

      【解决方案5】:

      bundle update解决冲突

      【讨论】:

      • bundle update 尊重依赖关系,因此不会解决任何冲突。
      【解决方案6】:

      我遇到了同样的问题,但在不同的上下文中:编写一个使用两个不同版本的 hashie 依赖项(1.2.0 和 3.1.0)的应用

      我进入 Gemfile.lock 并在括号中指定了旧版本 hashie (1.2.0),运行 bundle install,它工作了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多