0

最近在 cedar 上的 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]
4

1 回答 1

4

它实际上并没有使用 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 将每个版本的 gems 分开,而与 C api 版本无关。

于 2013-03-08T15:27:50.047 回答