2012-11-07 58 views
3

当使用RBConfig确定我的红宝石版本,使用Ruby 1.9.3时,我得到了 “错误” 的蝇头版本:的Ruby 1.9.3版本蝇头

# ruby -v 
ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux] 
# ruby -rrbconfig -e 'puts RbConfig::CONFIG.fetch(%q(MAJOR))' 
1 
# ruby -rrbconfig -e 'puts RbConfig::CONFIG.fetch(%q(MINOR))' 
9 
# ruby -rrbconfig -e 'puts RbConfig::CONFIG.fetch(%q(TEENY))' 
1 

使用Ruby 1.8.7 - 这工作得很好:

$ ruby -v 
ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux] 
$ ruby -rrbconfig -e 'puts Config::CONFIG.fetch(%q(MAJOR))' 
1 
$ ruby -rrbconfig -e 'puts Config::CONFIG.fetch(%q(MINOR))' 
8 
$ ruby -rrbconfig -e 'puts Config::CONFIG.fetch(%q(TEENY))' 
7 

我知道我可以得到patchlevel并使用那一点,但为什么是红宝石1.9.3返回1作为它的小版本?

+1

我正在使用'ruby 1.9.3p194(2012-04-20修订版35410)[x86_64-darwin10.8.0]',并且使用'Config'和'RbConfig'来得到和你一样的'TEENY'错误 – AGS

+0

我认为这是因为1.9.3是基于1.9.1的 - 正如ruby 1.9.2一样,但是找不到任何文件说明原因。我想知道如何正确检查1.9.3 - 我应该检查修补程序还是修订版? – Michael

+0

我认为这是因为链接库仍然使用ruby 1.9.1作为版本,任何人都可以验证这一点吗? – Michael

回答

4

Ruby有两个版本的概念:实际版本和“兼容版本”。对于所有红宝石1.9.1 - > 1.9.3,兼容版本为1.9.1,因为它们全都向后兼容1.9.1版本。

RUBY_VERSION常量包含发行版本号,但你需要分割点来获得主,次,和蝇头如果这些价值观是很重要的你:

>> major, minor, teeny = RUBY_VERSION.split(".") 
=> ["1", "9", "3"] 
>> teeny 
=> "3" 

这就是说,红宝石版本数字特别设计成ASCII可比,所以经常可以看到这样的代码进行简单的版本检查:

if RUBY_VERSION >= "1.9.3" 
    #... 
end 

补丁级别通常可以忽略不计,因为在补丁级别版本没有API的变化,只错误修复和安全rity补丁。希望有所帮助!

+0

谢谢 - 得出同样的结论 – Michael

1

看起来像Minor只是报告图书馆轻微 - 好吧。所以我只剩下ruby_version字符串 - 总比没有好。

# /usr/bin/ruby -rrbconfig -e 'print RbConfig::CONFIG.fetch(%q(LIBRUBY_SO))' 
libruby.so.1.9.1 
# /usr/bin/ruby -rrbconfig -e 'print RbConfig::CONFIG.fetch(%q(ruby_version))' 
1.9.3-p286 

红宝石1.8显示了这个:

$ /usr/bin/ruby -rrbconfig -e 'print RbConfig::CONFIG.fetch(%q(LIBRUBY_SO))' 
libruby1.8.so.1.8.7 

和Ruby 1.9.2-P320这样的:

$ ruby -rrbconfig -e 'print RbConfig::CONFIG.fetch(%q(LIBRUBY_SO))' 
libruby.so.1.9.1 

所以我想解开了谜底。

相关问题