【问题标题】:Bundle doesn't find compatible versions even though the locked one satisfies all conditions即使锁定的版本满足所有条件,捆绑包也找不到兼容版本
【发布时间】:2025-11-29 18:00:02
【问题描述】:

我正在构建一个 gem,my_gem,这取决于以下内容:

gem.add_dependency 'money-rails'
gem.add_dependency 'monetize'

在我的主应用程序中,我在 Gemfile 中指定:

gem 'my_gem', path: '~/my_gem'
gem 'money-rails', '1.4.2.upnxt.prerelease.4'
gem 'monetize', '1.1.1.upnxt.prerelease.1'

我的主应用的Gemfile.lock 包含:

monetize (1.1.1.upnxt.prerelease.1)
  money (~> 6.5.0)
money-rails (1.4.2.upnxt.prerelease.4)
  activesupport (>= 3.0)
  monetize (>= 1.1.1.u, < 1.2.0)
  money (~> 6.5.0)
  railties (>= 3.0)

但是,当我尝试 bundle 我的主应用程序时,我得到以下信息:

Bundler could not find compatible versions for gem "monetize":
In snapshot (Gemfile.lock):
  monetize (= 1.1.1.upnxt.prerelease.1)

In Gemfile:
  money-rails (= 1.4.2.upnxt.prerelease.4) ruby depends on
    monetize (< 1.2.0, >= 1.1.1.u) ruby

  my_gem (>= 0) ruby depends on
    monetize (>= 0) ruby

  monetize (= 1.1.1.upnxt.prerelease.1) ruby

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

为什么会这样? monetize1.1.1.upnxt.prerelease.1的已锁定版本大于01.1.1.u,小于1.2.0

更新

遵循 cmets 中的建议后,我只在 gem 的依赖项中留下了 money-rails。但是,现在我在我的主应用程序中运行 bundle 时看到了这一点:

Bundler could not find compatible versions for gem "money-rails":
In snapshot (Gemfile.lock):
  money-rails (= 1.4.2.upnxt.prerelease.4)

In Gemfile:
  my_gem (>= 0) ruby depends on
    money-rails (>= 0) ruby

  money-rails (= 1.4.2.upnxt.prerelease.4) ruby

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

如果我尝试bundle update money-rails,它会成功并显示:

Using monetize 1.1.1.upnxt.prerelease.1
Using money-rails 1.4.2.upnxt.prerelease.4

但是,如果我尝试使用bundle exec 运行任何东西,它仍然会失败并出现上述错误。我就是不明白出了什么问题。

更新 2

似乎如果我在我的 gem 中指定与我的主应用程序中相同的硬编码 money-rails 版本,它会管理到 bundle。所以现在我有:

gem.add_dependency 'money-rails', '1.4.2.upnxt.prerelease.4'

虽然它有效,但我不想让它这样,因为我不想对使用这个 gem 的应用程序强制执行任何固定版本。如果有人可以给我一个提示,将不胜感激!

【问题讨论】:

  • 如果money-rails 已经依赖于monetize,为什么还要将它包含在您的gem 中?我认为您应该能够让money-rails 包含它需要的monetize 版本,而不是明确指定它。
  • @ColtonFent 我已经为我的问题添加了更新。仍然有这个问题......

标签: ruby-on-rails ruby rubygems bundler


【解决方案1】:

因此,您最初尝试包含 Gem monetize 的一个版本,无论出于何种原因,它不满足 money-rails 的依赖要求。但是,money-rails 已经依赖于 monetize,因此您不必在 gem 中为 monetize 添加依赖关系。您应该让money-rails 弄清楚要安装哪个版本的依赖项,而不是手动锁定它。

【讨论】:

  • 确实,这是导致我第一次更新的解决方案,但我仍然不知道是什么让我的问题的第二次更新真正起作用。
最近更新 更多