我如何创建和发布依赖于分叉 ruby​​gems 的 ruby​​gem?

how can i create and publish a rubygem which relies on forked rubygems?

我一直在创建一个依赖于其他 gem 的 rubygem(我们称它为 'abc')。

随着我的开发进展,我发现我需要对我所依赖的 gem 进行更改。所以我在 github 上分叉它们并将它们添加到我的 Gemfile 中。

source 'https://rubygems.org'

gem 'xxx', '~> 0.0.6',  :git => 'https://github.com/poulh/xxx.git'
gem 'yyy', '~> 0.8.2', :git => 'https://github.com/poulh/yyy.git'
gem 'zzz', '~> 0.0.14', :git => 'https://github.com/poulh/zzz.git'

然后我使用 bundle install 并将这一行添加到 gem 目录 gem 中的 lib/abc.rb

require 'bundler/setup'
require 'xxx'
require 'yyy'
require 'zzz'

这很有效,我可以继续我的开发。

现在我的 gem 已经完成,我想将它发布到 rubygems.org。

但是我需要对上述 gem 进行的自定义更改,并且当我执行合并请求以合并我的更改时无法从所有者那里得到响应。

理想情况下,我的 gem 用户可以 运行

gem install abc

他们会在路上,但是当我测试这个时 gem 没有也不会工作

可以避免这些额外的步骤吗?

正如您在 this article 中所读到的那样,将 gem 的依赖项放入其 Gemfile 中并不是正确的方法。相反,您应该将 gemspec 行放在 Gemfile 中,指示它从 gemspec 文件中读取。将 Gemfile 视为仅用于开发 - 当您推送 gem 时,gemspec 单独成为依赖项的规范。

而且,如您所见 here,不可能将 git 源代码放入 gem 规范中。

鉴于此,我的建议是将分叉的 gem 的 源代码 移动到您的文件中,并将其依赖项添加到您的 gem规格。篡夺它,换句话说 - 让它成为你项目的一部分。

您还可以在 README 中指定用户应该将这个单独的 gem 添加到他们的 Gemfile 中,该文件源自 git。这对您来说更容易,但会在安装过程中增加一个步骤。