2017-02-22 35 views
0

我一直在创建一个rubygem(让我们称之为'abc'),它依赖于其他的宝石。我如何创建和发布依赖分叉rubygems的rubygem?

随着我的发展,我发现我需要改变我所依赖的宝石。所以我把它们放在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' 

然后我用捆绑安装,在我的宝石的目录添加了此行的lib/abc.rb

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

这个工作,我可以继续我的发展。

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

但是,我需要对上述gem进行的自定义更改,并且当我在我的更改中执行了合并拉取请求时,我无法从所有者获得响应。

理想的情况下我的宝石的用户可以只运行

gem install abc 

,他们会在他们的方式,但是当我测试这个宝石不会不还

  • 克隆农行的回购工作
  • 运行捆绑安装

可避免这些额外的步骤?

回答

2

正如你可以在this article中看到的,把你的gem的依赖关系放在它的Gemfile中是不正确的。相反,你应该把gemspec行放在Gemfile中,它指示它从gemspec文件中读取数据。考虑将Gemfile仅限于开发 - 当您推送gem时,gemspec就会成为依赖关系的规范。

而且,正如您可以阅读here,不可能将git源代码放入gemspec中。

鉴于此,我的建议是将分叉宝石的源代码移动到您的文件中,并将它的依赖关系添加到您的gemspec。换句话说,篡改它 - 使其成为您项目的一部分。

您也可以在自述文件中指定用户应该将这个单独的gem添加到他们的Gemfile中,该gemfile来自git。这对你来说更容易,但又增加了安装过程的另一步。

+0

尽管我基本同意,但使用分叉宝石总是难以管理,更难以销售。理想情况下,您可以修复这些宝石,以便它们保持原样并且可以直接依赖。 – tadman

+0

谢谢你的评论。我结束了分支宝石(他们几年未更新),并在rubygems.org上制作我自己的版本 – Poul