首页 > 解决方案 > “Bundler 找不到 gem 的兼容版本”,即使版本不冲突

问题描述

Bundle install抱怨它找不到gem“actionmailer”的兼容版本,即使它在错误中显示的依赖约束不冲突。

它给了我这个让我bundle install很难过的输出

  In Gemfile:
    premailer-rails was resolved to 1.10.3, which depends on
      actionmailer (>= 3)

    rails (> 3.0, < 3.2.22.1) was resolved to 3.2.22, which depends on
      actionmailer (= 3.2.22)

依赖项似乎根本不冲突。

我尝试将 rails 显式设置为“3”,而不是 3.2.22.1,这似乎消除了错误。但是 3.xxx 不等于 >3 吗?

在我的 Gemfile 中:

gem 'rails', '<3.2.22.1', '>3.0'
gem 'premailer-rails'
... #other gems

输出显示它将 rails 解析为 3.2.22,actionmailer >=3 是 premailer-rails 的依赖项,而 actionmailer = 3.2.22 是 rails 的依赖项。

满足所有约束。3.2.22 >=3,依赖应该解决。我错过了什么?

标签: ruby-on-railsrubybundle

解决方案


你之前在这个目录中安装过更新的 Rails 吗?在这种情况下,bundler 会记住它的依赖actionmailer版本,现在这个更新版本actionmailer会阻止安装旧版本。因为installaction 实际上是保守更新,只分析 lastGemfile.lock和 current之间的变化Gemfile

无论如何,删除Gemfile.lockbundle install再次运行。


推荐阅读