2015-07-04 40 views
2

我的代碼發生任意的位,需要紅寶石> = 2.1.0。我想在運行時測試是否滿足這個要求。什麼是正確的做法?如何檢查運行時是否存在最低Ruby版本?

我看着Rails codebase,他們使用一個簡單的字符串比較是這樣的:

RUBY_VERSION >= "2.1.0" 

但就是不容易出錯的版本號的字符串比較?如果某些未來的Ruby版本是「10.0.0」,那麼這不會返回錯誤的結果嗎?

+0

到底爲什麼它需要2.1?通常最好測試一下特性(例如用各種'* defined?'方法)而不是版本。 – cremno

+2

您也可以使用'寶石:: Version.new(RUBY_VERSION)> =寶石:: Version.new( '2.1.0')''因爲是rubygems'默認需要。 – cremno

+0

@cremno我正在使用優化,直到2.1才完成。 –

回答

0

良好的通知,看來你已經找到可能的錯誤,無論是下降了一張字條給rails issue tracker或自己打補丁並進行拉請求。

有小而簡單Versionomy寶石比較正確版本。

+0

確實,這是一個錯誤。這是一個常見的錯誤,僅僅因爲這個原因,版本編號方案發生了變化,Ruby 1.10.0作爲Ruby 1.9.1發佈。 –

+0

@JörgWMittag這是吉祥物錯誤什麼的,爲什麼沒有他們解決了這個問題了嗎? –

+1

這是開發者頭腦中的一個錯誤,你不能解決這個問題。對於像Matt這樣的每個開發者來說,他認識到簡單的字符串比較是錯誤的,還有100個誰不會。這個決定是在發佈Ruby 1.10和「打破」數千個腳本(儘管從技術上講它是腳本被破壞)或者改變版本編號方案併發布Ruby 1.9.1之間做出的。這與微軟發佈Windows 7的版本號爲6.1的原因類似:是的,所有檢查主數字== 6的應用程序都是錯誤的,但試圖向最終用戶解釋,他們*看到的所有*是「Windows 7打破了...... –

相關問題