【问题标题】:how to require different gems with the same name?如何要求具有相同名称的不同宝石?
【发布时间】:2014-09-18 11:31:47
【问题描述】:

我有兴趣制作一个要求我为 ruby​​ 提供 gmail gem 的应用程序。 现在有 2 颗宝石:

https://github.com/dcparker/ruby-gmail

https://github.com/nu7hatch/gmail

两个 gem 具有相同的 require 名称,即:gmail 第二个很清楚,但其中一种方法存在问题。此方法在第一个 gem(链接)中效果很好。所以我在想也许我可以要求第一个用于这种方法。有没有可能,怎么做?

【问题讨论】:

  • 我怀疑你能否同时使用这两种宝石。一个定义class Gmail,另一个定义module Gmail。您不能拥有同名的类和模块。即使两者都是一个类或都是一个模块(这样你就可以同时需要这两个文件),你会很幸运让他们一起工作。

标签: ruby-on-rails ruby gem


【解决方案1】:

您可以将以下内容添加到您的 Gemfile:

gem 'gmail', :git => "git://github.com/dcparker/ruby-gmail", :branch => "master"
gem 'gmail', :git => "git://github.com/nu7hatch/gmail", :branch => "master"

【讨论】:

  • 这行不通。您将收到错误消息“您不能两次指定来自不同来源的相同 gem。”
  • 有什么方法可以创建别名吗?就像将第一个 gem 别名为 g1 并将第二个 gem 别名为 g2 或类似的东西。
【解决方案2】:

正如其他人的回答和 cmets 所说,您不能简单地要求两个 gem。

但是,鉴于两者都托管在 GitHub 上,您可以分叉其中一个并重命名有问题的类。只要你的重命名在 gem 中是一致的,你就可以在你的 Gemfile 中使用你的 fork

当然,您不可能轻易地将更改重新设置到您的 fork 上,但如果您真的必须同时使用这两个 gem,这可能是您满意的折衷方案。

【讨论】:

    猜你喜欢
    • 2013-12-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多