【问题标题】:Two gems share same require?两个宝石共享相同的要求?
【发布时间】:2013-12-01 23:28:06
【问题描述】:

当我打电话时:

require 'retryable' 

这两个宝石碰撞:

因为他们都有一个“可重试”文件,所以他们要求用户要求。我对使用第一个 gem 很感兴趣,但这并不总是发生。

此代码作为我自己的 gem 的一部分执行,它必须对所有用户都是可靠的。

有没有办法专门从 gem 中要求(因为 gem 名称当然不同)?

如何解决这个命名冲突?

编辑:澄清一下,这是官方 repo,gem 名称实际上是不同的(“retryable-rb”和“carlo-retryable”),但是他们都要求他们的用户需要 lib/retryable.rb 文件require 'retryable'

【问题讨论】:

  • 如果从官方的Ruby Gem仓库下载,两个不同的gem是不允许同名的,所以应该不会出现这种情况。您使用的是非官方存储库吗?
  • 如果你只对第一个 gem 感兴趣,为什么不卸载第二个呢?你打算在其他场合使用它吗?
  • 反正第一颗宝石两岁,第二颗三岁。我认为使用它们不是一个好的选择。
  • gem 名称实际上是不同的“retryable-rb”和“carlo-retryable”,但它们仍然具有相同的“retryable”文件作为要求。是的,我只能安装一个,但我不能要求我的用户每次想要使用我的 gem 时都运行 bundler,如果他们需要同时使用另一个怎么办?它们都是老宝石,是的,它也是非常简单的代码,但我仍然想要解决这个问题。
  • 分叉并重命名?

标签: ruby rubygems gem require


【解决方案1】:

您可以使用 gem method 显式激活特定 gem。

在这种情况下,您需要 retryable-rb gem,而不是任何其他可能有 retryable.rb 文件的对象:

gem 'retryable-rb'   # activates the gem in question
                     # and adds its lib dir to load path

require 'retryable'  # loads retryable.rb from the retryable-rb gem, as it
                     # is now on the load path

【讨论】:

  • 这对我不起作用。另一个宝石仍然是需要加载的宝石。
  • @ZirconCode 如果是这种情况,那么听起来您的 Ruby/Gem 安装出现了问题,或者正在发生其他事情。你不是想同时使用这两种宝石吗?
  • 啊,这个解决方案现在可以工作了。我之前有一个剩余的冲突 Gemfile.lock,谢谢 =)
猜你喜欢
  • 2014-09-18
  • 2013-01-22
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2023-03-23
相关资源
最近更新 更多