Rubygems可选依赖项

时间:2010-06-07 21:34:01

标签: ruby rubygems

如何向rubygems添加可选的依赖项,因为它不支持它?

用例:

  • 我有一个依赖于Backports,Extlib,Facets或ActiveSupport的库。在过去,我只是没有添加任何这种依赖,因为人们可以选择(阅读:它可以很好地与他们使用的任何东西),但人们抱怨很多关于图书馆没有开箱即用,或者他们会相信它取决于ActiveSupport(在某些情况下,对某些人来说是不行的)。所以目前它依赖于Backports,因为它是最小的。虽然这意味着如果他们安装我的库,人们会安装Backports,即使他们可能不会在运行时使用它。
  • 我想依赖于不同的宝石取决于环境(例如MRI上的Johnson / Rubinius,JRuby上的TheRubyRhino,MacRuby上的Lyndon)。

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

2 个答案:

答案 0 :(得分:4)

您是否尝试过为未满足的依赖项提供信息性错误消息以清除这些误解?使用zombie-chaser,我不会让gosu成为依赖,但如果人们尝试使用没有gosu的图形版本,我告诉他们他们需要安装gosu。

答案 1 :(得分: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