【发布时间】: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.
为什么会这样? monetize、1.1.1.upnxt.prerelease.1的已锁定版本大于0和1.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