最近在我们的雪松上的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]
答案 0 :(得分:4)
它实际上并没有使用Ruby 1.9.1 - 正如来自this answer的Marc-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版本如何。