2010-06-07 115 views
8

如何将可选依赖项添加到rubygems,因为它不支持它?Rubygems可选依赖关系

使用案例:

  • 我有,它要么依赖于反向移植,EXTLIB,面或的ActiveSupport库。在过去,我只是没有添加任何这种依赖,因为人们可以选择(阅读:它可以很好地与他们使用的任何东西一起玩),但是人们抱怨了很多关于图书馆没有开箱即用,或者他们会相信它依赖于ActiveSupport(在某些情况下,这对某些人来说是不适合的)。所以目前它取决于Backports,因为它是最小的。尽管这意味着如果安装我的库,人们将安装Backports,即使它们可能不会在运行系统中使用它。
  • 我想依靠不同的宝石取决于环境(即Johnson on MRI/Rubinius,JRuby上的TheRubyRhino,MacRuby上的Lyndon)。

我虽然要做的一个方法是劫持extconf.rb。我可以在那里做系统检查。但是,这感觉不对。而且,如果这是唯一的方法,我该如何去做呢?我如何触发从那里安装额外的宝石? system 'gem install ...'

回答

4

您是否尝试过给出未填充的依赖关系的信息错误消息来消除这些误解?使用僵尸追踪器,我不会让gosu成为依赖项,但是如果有人试图在没有gosu的情况下使用它的图形化版本,我会通知他们他们需要安装gosu。

+2

我做到了,但有些人只是不在乎和尖叫“错误”。另外,我希望它能够工作。虽然这可能是要走的路(因为rubygems无法处理这种情况)。 – 2010-06-08 12:45:31

+0

我不知道rubygems是否接受功能请求,或者它是否“受欢迎的修补程序”...... – 2010-06-08 23:16:21

+0

我认为这很难实现,例如因为破坏兼容性不是选项,元数据可能不包含可执行代码。 – 2010-06-09 10:48:27

2

我知道,以“劫持extconf.rb”的方式一对夫妇宝石:

  • perftools.rb具有相关性,如果是在1.9,但不要求在1.8这种依赖性。
  • ruby-debug-ide依赖于1.8上的ruby-debug-base,1.9上的ruby-debug-base19。

两者均使用Gem::DependencyInstaller#install进行安装,这可能优于system 'gem install ...'

另请参阅此rubygems功能请求:specify dependencies per ruby version

+1

谢谢,我实际上写了一个小工具,回到完成这个工作:https://github.com/rkh/gem_tools – 2011-08-23 07:20:24