rails2.2.2からrails2.3.14へアップデート

参考url

とりあえずrailsのバージョンを上げる

   gem install rails -v2.3.14 --no-rdoc --no-ri

testの継承元がActiveSupportに変更されている。

test/test_helper.rbで

   -class Test::Unit::TestCase
   +class ActiveSupport::TestCase

とする。

controllelr/application.rbがcontroller/application_controller.rbにかわっている

中身は変える必要がなさそうなので単純にリネームする。

config/boot.rbとconfig/enviroments/test.rbを変更する

rails2.2に上げる時にもやったんだけどrailsguideのscaffoldあたりまでを新しいrailsバージョンでやっておいて
config配下の設定ファイルをdiffで差分を確認しています。

config/boot.rb

    def load_initializer
      require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
      Rails::Initializer.run(:install_gem_spec_stubs)
   +  Rails::GemDependency.add_frozen_gem_path
    end

    rescue Gem::LoadError => load_error
   -  $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
   -   exit 1
   +   if load_error.message =~ /Could not find RubyGem rails/
   +     STDERR.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
   +     exit 1
   +   else
   +     raise
   +   end

    def load_rubygems
   +   min_version = '1.3.2'
       require 'rubygems'
   -   min_version = '1.3.1'

config/environments/test.rb

   + config.action_view.cache_template_loading            = true

validates_date_timeでエラーになる

こんなふうにHogeモデルを初期化すると

   hoge = Hoge.new('written_on(1i)' => "", 'written_on(2i)' => "", 'written_on(3i)' => "")
   hoge#written_on_before_type_cast  => '-00-00'

ってなってしまう。

なので、validates_date_timeプラグインの中で

   + raw_value = nil if (raw_value == "" || raw_value =~ /-00-00/)

ってコードを追加した。

根本的な問題解決ではないので、この対処はやっちゃだめ(やってる自分が言ってるのって説得力ないな)。
最低限アプリ側のコードで対処しろってツッコミが来そうですな。このあとのrails3.0へのアップグレードで対応しました。

反省点

  • validates_date_timeの対処がイマイチ感満載だなぁ
  • rails newで作った各ファイルたちをdiffで確認するのはかなりおすすめ