以下はローカルで機能します。
require 'sinatra'
get '/rand' do
["one", "two", "three"][rand(0..2)]
end
ただし、herokuでは、Internal Server Error
.
興味深いことに、これは機能します:
get '/rand' do
["one", "two", "three"][rand(2) - 1]
end
なんで?
heroku とローカル dev マシンで同じバージョンの ruby を使用していることを確認します。
ruby -v
ローカルおよび heroku で実行:heroku run 'ruby -v'
次に、Gemfile に追加ruby "1.9.3"
して、heroku が使用する ruby のバージョンを設定します。
この理由は、メソッド rand が範囲値の受け入れを開始したのは (私が信じている) 1.9.3 の後であるためです。Heroku は Ruby 1.9.1 を使用しています。これは、heroku ログで確認できます。範囲値の代わりに整数値を使用する方法を工夫する必要があります。