我需要在项目中使用两个都拥有PDF namespace 的gem:pdf-reader和htmldoc。

有什么办法可以让他们在一起玩得开心吗?我能想到的唯一方法是重写自己的htmldoc版本以为其提供不同的 namespace 。

最佳答案

对于这个问题,可能没有完美的解决方案。如果您确实需要两个 gem 并排工作,我认为您最好的选择是 fork 其中一个(或可能两者)并使用您的 fork 。这就是我要做的事情:

  • 如果任何一个gem托管在Github上,则对其进行 fork ,或者如果两者都托管在Github上,则看起来工作最少。
  • 如果Github上都不存在任何gem,请查看您是否可以掌握源代码(可以从gem抓取它,但是找到真实的存储库可能会有所帮助,因为geem中可能还包含其他文件) ,并将其放在Github上的存储库中。确保gem的许可证允许这样做(如果它是常见的开放源代码许可证之一,则几乎可以肯定这样做)。
  • 进行更改。
  • 确保存储库的根目录中有一个.gemspec文件,否则下一步将无法进行。
  • 使用Bundler来管理您的项目依赖项。无需指定已修改为的库的依赖关系
    gem 'the_gem'
    

    像这样指定它:
    gem 'the_gem', :git => 'git://github.com/you/the_gem.git'
    

    (但将存储库的URL更改为实际的URL)
  • 发送电子邮件给您修改过的gem的维护者,并请他或她考虑在下一发行版中合并您的更改。

  • Bundler使得使用替代版本的 gem 变得非常容易,并且麻烦最少。我经常 fork gem ,修复错误或添加功能,将Gemfile更改为指向我的版本,然后要求维护者合并我的更改。何时或是否发生这种情况,我只需将Gemfile改回为仅引用gem的正式版本即可。

    如果维护者不想合并您的更改,并且想要将版本分发给其他人,另一种策略是将您的版本作为新的gem推送到Rubygems,但在这种情况下,请使用您的名字在gem名称前添加前缀,或者其他一些将您的 gem 标识为变体的字符串。

    关于ruby - 冲突的 ruby gem ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4495512/

    10-12 13:01
    查看更多