为什么Heroku Stack Traces表明Ruby 1.9.1正在使用?

最近在雪松上的Heroku应用程序中看到了这个堆栈跟踪

/usr/local/lib/ruby/1.9.1/uri/common.rb:156:in `split' /usr/local/lib/ruby/1.9.1/uri/common.rb:174:in `parse' /usr/local/lib/ruby/1.9.1/uri/common.rb:628:in `parse' 

为什么使用Ruby 1.9.1?

我的Gemfile没有指定Ruby版本。 Heroku的文档表明我们应该将Cedar默认值设为1.9.2

https://devcenter.heroku.com/articles/ruby-versions

编辑:

ruby -v似乎报告了正确的版本

 $ heroku run "ruby -v" Running `ruby -v` attached to terminal... up, run.2594 ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux] 

它实际上并没有使用Ruby 1.9.1 – 正如Marc-AndréLafortune的 回答所解释的那样,它与C接口有关,自从Ruby 1.9.1以来它没有改变。

在Ruby 1.9.0中,C接口已从Ruby 1.8系列更改。

编译为本机代码的gem必须重新编译。

在Ruby 1.9.1中再次更改了界面,并在Ruby 1.9.2和3中保持相同。这解释了您在路径中看到的1.9.1。

这个想法是你可以在你的系统上安装不同版本的Ruby,并且gem将在具有相同C api的组内共享。 所以Ruby 1.8.6和1.8.7可以分享他们的gem,Ruby 1.9.1,.2和.3也可以。

不过,这不一定是最好的主意。 在任何情况下,大多数人使用rvm访问不同版本的Ruby,rvm为每个版本保持gem分离,而不管C api版本如何。