2009-10-25 33 views
5

只有當用戶使用特定版本的紅寶石時,纔有可能添加寶石依賴項?如何將條件rubygem需求添加到寶石規格中?

背景:我正在使用Test :: Unit :: Autorunner之類的fork of a project。它們是Ruby 1.8標準庫的一部分,但不是1.9.1中標準庫的一部分,而是在「測試單元」gem中。我想添加一個依賴關係,如果有人使用ruby 1.9.1或更高版本,請安裝「test-unit」gem,但如果他們使用1.8或更低版本,則不需要安裝任何東西。

回答

0

乾草...我是那種紅寶石新手......如果這是做到這一點的最好辦法。

任何方式...我希望我能做到這一點只用紅寶石....但是u可以使用操作系統的shell來做到這一點,在你的程序的安裝程序使用此,只是執行(適用於基於Linux的操作系統系統):

$ruby --version 

(U能夠執行從紅寶石安裝程序文件,就像:ruby --version) ,並把可能根據輸出,如果是1.9.1添加一個額外的行執行:

$ sudo gem install gem_name 

其他,只是讓它成爲。

-1

你不行。您需要反正有

spec.required_ruby_version = '~> 1.9.1' 
spec.add_dependency 'test-unit', '~> 2.0.5' 
+1

-1請不要這樣做。這就搞砸了各種依賴工具。 – 2009-11-08 02:16:48

+0

@Bob阿曼:你碰巧知道該怎麼辦? – 2009-11-09 22:37:20

-1

Gemspecs建立兩種寶石,一個與

spec.required_ruby_version = '~> 1.8.6' 

和一個只是Ruby文件,這樣你就可以在其內部執行任何Ruby代碼,所以:

spec.add_dependency = 'test-unit', '>= 2.0' if RUBY_VERSION =~ '1.9' 

編輯:規格只在建設者機器上運行。

+0

Ruby代碼在哪裏執行?在寶石創建者的機器上,還是在安裝者的機器上? – 2009-11-09 22:35:33

+0

忘記它。它只會在創作者的機器上運行。爲了不會對您產生巨大的維護問題,您可以展示安裝後的消息,或使用pre_install或post_intall掛鉤來安裝gem。 我編輯了答案。 – Mereghost 2009-11-10 14:41:56

1

我做了一個項目,這個確切的事情。訣竅是將腳本作爲擴展添加,然後在安裝時在用戶的機器上執行。

以下是代碼片段和鏈接到我們的github上:

首先,在gemspec時,(我們實際上使用的Rakefile生成它,但結果最終是相同的)source

# This file *needs* to be named this, there are other files 
# for other extension processors 
s.extensions << 'ext/mkrf_conf.rb' 

然後相關線路在mkrf_conf.rb source

require 'rubygems/dependency_installer.rb' 
inst = Gem::DependencyInstaller.new 
inst.install "test-unit" if RUBY_VERSION > "1.9" 
+0

我正在嘗試這樣做,但是當我嘗試使用此擴展程序通過捆綁安裝來安裝gem時,根本沒有安裝條件gem。 – wawka 2015-01-10 11:36:49

+0

它已安裝。只是沒有輸出。嘗試在'irb'中要求你的寶石。 – hlcs 2016-11-08 06:15:28