4

我正在尝试为依赖于未命名的外部 gem 的项目构建 gem :)

在开发过程中,我在外部项目中发现了一个小错误,我添加了一个解决它的单行修复程序。我在 github 上提交了一个 pull request,但我有一段时间没有得到维护者的回复。

我想让我的项目作为 gem 可用,但如果没有这个修复它就无法工作。我能做些什么?解决此问题的最佳方法是什么。

我想到的一个选择是创建一个分叉项目的 gem 并以一个复杂的名称发布它,并依赖它。但我不喜欢用如此愚蠢的宝石污染服务器的想法。

所以我想知道是否可以将外部 gem 捆绑到我的应用程序中,并使其与我的 gem 一起安装。最干净和最简单的方法是什么?

4

3 回答 3

2

您是否考虑过用自己的代码覆盖该函数?几周前,我在工作中遇到了一些软件的类似问题,我刚刚重新定义了该功能。

由于它只是您找到的一行,因此这似乎是最简单的解决方案,但我对 Ruby 有点陌生,所以这个计划可能存在我没有考虑过的问题。

于 2012-06-15T19:05:05.077 回答
1

您可以以不同的名称发布它,一旦上游维护者接受了您的修复,您就可以拉出您的版本。

于 2012-06-15T12:16:16.933 回答
0

事实上,这很简单。在您的 Gemfile 中,将依赖项添加为:

gem "nokogiri", :git => "git://github.com/tenderlove/nokogiri.git"

为此,您还需要使用 bundler 来管理您的 gem,您可以在此处获取更多信息。

另一种选择是将您更改的代码添加到您的gem中的供应商目录并将其与您的代码一起分发,这样您就可以将此其他gem的主目录添加到您的加载路径中,您将能够在没有任何问题。

要将某些内容添加到加载路径,您只需执行以下操作:

$LOAD_PATH.unshift( File.join(File.dirname(__FILE__), '..', 'vendor', 'some_gem', 'lib') )

您将能够直接在some_gem.

于 2012-06-15T11:49:55.730 回答