2 月 27 2008

Rails::Initializer.check_ruby_version()

Published by haga at 13:11 under code reading, ruby, ruby on rails

会社の昼休みを使ってコードリーディング。

check_ruby_versionを見ていきます。 メソッド名を見るだけで、何をするメソッドか一目瞭然。

def check_ruby_version
  require 'ruby_version_check'
end


ruby_version_check.rbをロードして・・

min_release  = "1.8.2 (2004-12-25)"
ruby_release = "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE})"
if ruby_release =~ /1\.8\.3/
  abort <<-end_message

    Rails does not work with Ruby version 1.8.3.
    Please upgrade to version 1.8.4 or downgrade to 1.8.2.

  end_message
elsif ruby_release <min_release
  abort <<-end_message

    Rails requires Ruby version #{min_release} or later.
    You're running #{ruby_release}; please upgrade to continue.

  end_message
end


短いですね。 Rubyのバージョンが1.8.2を超えているかチェックしているだけのようです。

Process.abortメソッドは、メッセージとともにプログラムを終了するものです。 Rubyのバージョンが1.8.3であるときと、1.8.2未満の場合は終了しています。

どうも1.8.3とRailsは相性が悪いということなんでしょう。

興味深いのは文字列同士の比較演算

"1.8.2" <"1.8.6" # => true


こんな挙動ですよね?Rubyなれしてないと怖くて使えないな・・。

"1.8.2".gsub(/\./,'').to_i <"1.8.6".gsub(/\./,'').to_i


こんな感じで書いちゃうでしょうね。。

Trackback URI | Comments RSS

Leave a Reply