我正在尝试为一个依赖于未命名的外部gem的项目构建gem:)
在开发过程中,我在外部项目中发现了一个小错误,我添加了一个解决它的一行修复程序。我在github上提交了一个pull请求,但是我现在还没有得到维护者的回复。
我想让我的项目可用作宝石,但如果没有这个修复它就无法工作。我能做什么? 解决这个问题的最佳方法是什么。
我想到的一个选项是创建一个分叉项目的gem并以一个复杂的名称发布它,并依赖于它。但我不喜欢用这样一个愚蠢的宝石污染服务器的想法。
所以我想知道是否可以将外部gem捆绑到我的应用程序中,并将其与我的gem一起安装。什么是最干净,最简单的方法呢?
答案 0 :(得分:2)
您是否考虑使用自己的代码覆盖该功能?我几周前在工作中遇到了类似的问题,我刚刚重新定义了这个功能。
由于它只是你发现的一行,看起来这是最简单的解决方案,但我对Ruby有点新意,所以也许这个计划存在问题,我没有考虑过。
答案 1 :(得分:1)
您可以使用其他名称发布它,一旦上游维护者接受了您的修复,您就可以yank您的版本。
答案 2 :(得分:0)
gem "nokogiri", :git => "git://github.com/tenderlove/nokogiri.git"
要做到这一点,您还需要使用bundler管理您的gem,您可以获得有关此here的更多信息。
另一个选择是将您更改的代码添加到gem中的vendor目录并使用您的代码分发它,这样您就可以将此另一个gem的主目录添加到您的加载路径中,您将能够要求它没有任何问题。
要在加载路径中添加内容,您只需执行以下操作:
$LOAD_PATH.unshift( File.join(File.dirname(__FILE__), '..', 'vendor', 'some_gem', 'lib') )
您将能够直接要求some_gem
的文件。