2015-07-04 41 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打破了...... –

相关问题