2010-06-07 151 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