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

时间:2013-03-08 15:02:56

标签: ruby heroku

最近在我们的雪松上的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]

1 个答案:

答案 0 :(得分:4)

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

  

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

     

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

     

在Ruby 1.9.1中再次更改了界面,并在Ruby 1.9.2&中保持相同。这解释了你在路上看到的1.9.1。

     

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

     但是,这不一定是最好的主意。在任何情况下,大多数人都使用rvm来访问不同版本的Ruby,rvm会为每个版本分别保留宝石,无论C api版本如何。