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からのこの回答で説明されているように、Ruby 1.9.1 以降変更されていない C インターフェイスに関係しています。

Ruby 1.9.0 では、Ruby 1.8 系から C インターフェイスが変更されました。

ネイティブ コードにコンパイルされる 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 は C API のバージョンに関係なく、バージョンごとに異なる gem を保持します。

于 2013-03-08T15:27:50.047 に答える