Rails2.0から2.1への移行を試してみる
ここ最近、MacBookの作業環境改善に努めている間に、Railsは2.1にバージョンアップしていた。相変わらずの進化のスピード。すでに出遅れた感はあるが、自分のRails環境も2.1にしてみた。Railsの複数バージョン環境は共存できることが分かっているので結構気軽に。でも、2.1環境でちゃんと稼働させるまでには、それなりの試練が待っていた。
gemでアップデート
視野の狭い自分は、いきなりgem update railsとやってしまったが、これではちゃんとアップデートされなかった。まずはgem自体のアップデートが必要なことが多いのであった...。(以前の日記Rails2.0.2を使ってみるにも書いていたのに、すっかり忘れている。)もう一度仕切り直しで、以下のようにしてみた。
- gemのバージョンが1.0.1から1.1.1に上がった。
$ sudo gem update --system Updating RubyGems... Bulk updating Gem source index for: http://gems.rubyforge.org Updating metadata for 13 gems from http://gems.rubyonrails.org ............. complete Attempting remote update of rubygems-update Successfully installed rubygems-update-1.1.1 1 gem installed Updating version of RubyGems to 1.1.1 Installing RubyGems 1.1.1
- その後、Railsのバージョンアップを実行した。
$ sudo gem update rails Password: Updating installed gems ...(中略)... complete Successfully installed activesupport-2.1.0 Successfully installed activerecord-2.1.0 Successfully installed actionpack-2.1.0 Successfully installed actionmailer-2.1.0 Successfully installed activeresource-2.1.0 Successfully installed rails-2.1.0 Gems updated: activesupport, activerecord, actionpack, actionmailer, activeresource, rails
railsプロジェクトのアップデート
Rails2.0.2からのサンプルプロジェクトをコピーして、以下のようにやってみた。
- environment.rbのRAILS_GEM_VERSIONを「2.0.2」から「2.1.0」に変更した。
#---------- config/environment.rb ---------- ...(中略)... # Specifies gem version of Rails to use when vendor/rails is not present RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION ...(中略)...
- rakeによるプロジェクトの基本設定アップデート
$ rake rails:update
- 以下のファイルが最新のRails用に更新されるようだ。
- config/boot.rb
- public/javascriptsフォルダのファイル
- scriptフォルダのファイル
サーバーが起動するまで
以上の設定をしてscript/serverをやってみるが、すんなり起動するはずはないか...。以下のようなエラーで怒られて、Mongrelサーバーは起動せず...。
config.action_view.cache_template_extensions
- config/environments/development.rbの「config.action_view.cache_template_extensions= false」オプションは推奨されなくなり、何の影響も与えないらしい...。削除してくださいと警告されているので、削除してしまった。(警告なので削除しなくてもサーバーは起動する。)
DEPRECATION WARNING: config.action_view.cache_template_extensions option has been deprecated and has no affect. Please remove it from your config files. See http://www.rubyonrails.org/deprecation for details. (called from send at /Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/initializer.rb:455)
amrita2
- どうやらamrita2でエラーが発生しているようだ。
"78756" => Booting Mongrel (use 'script/server webrick' to force WEBrick) => Rails 2.1.0 application starting on http://127.0.0.1:3005 => Call with -d to detach => Ctrl-C to shutdown server ** Starting Mongrel listening at 127.0.0.1:3005 ** Starting Rails with development environment... Exiting /Users/bebe/Documents/Aptana Studio/test_slip202_210/vendor/plugins/amrita2-2.0.2/init.rb:5:in `evaluate_init_rb': undefined method `register_template_handler' for ActionView::Base:Class (NoMethodError) from /Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/rails/plugin.rb:95:in `evaluate_init_rb' from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/core_ext/kernel/reporting.rb:11:in `silence_warnings' from /Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/rails/plugin.rb:91:in `evaluate_init_rb' from /Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/rails/plugin.rb:44:in `load' from /Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/rails/plugin/loader.rb:33:in `load_plugins' from /Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/rails/plugin/loader.rb:32:in `each' from /Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/rails/plugin/loader.rb:32:in `load_plugins' from /Library/Ruby/Gems/1.8/gems/rails-2.1.0/lib/initializer.rb:283:in `load_plugins' ... 32 levels... from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:27:in `require' from ./script/server:3 from -e:2:in `load' from -e:2
gettext
- ruby-gettextでもエラーが発生している模様。
"27870" => Booting Mongrel (use 'script/server webrick' to force WEBrick) => Rails 2.1.0 application starting on http://127.0.0.1:3003 => Call with -d to detach => Ctrl-C to shutdown server ** Starting Mongrel listening at 127.0.0.1:3003 ** Starting Rails with development environment... Exiting /Users/bebe/Documents/Aptana Studio/test_slip210/app/controllers/application.rb:11: undefined method `init_gettext' for ApplicationController:Class (NoMethodError) from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:215:in `load_without_new_constant_marking' from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:215:in `load_file' from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:354:in `new_constants_in' from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:214:in `load_file' from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:95:in `require_or_load' from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:60:in `depend_on' from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:456:in `require_dependency' from /Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/dispatcher.rb:18:in `define_dispatcher_callbacks' ... 42 levels... from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:27:in `require' from ./script/server:3 from -e:2:in `load' from -e:2
- 最新のバージョン1.91.0にしてみたが、やはりエラーが発生している。
- 対策はrails2.0.2 → 2.1.0 に移行 - 夜の Discoveryさんのページに載っていた。(感謝です!)
- /config/initializers/gettext.rbを追加して、「require 'gettext/rails'」を含めて以下のように設定した。
require 'gettext/rails' module ActionView class Base delegate :file_exists?, :to => :finder unless respond_to?(:file_exists?) end end
- config/environment.rbでの「require 'gettext/rails'」は削除した。
以上でサーバーは起動し、見た目上は正常に稼働している模様。
- ruby-gettext 1.92.0では、シンプルに以下の設定でOKになった。
# ---------- config/environment.rb ---------- # 文字列処理で日本語を考慮した処理メソッドを利用可能にする。 # http://www.ruby-lang.org/ja/man/html/jcode.html require 'jcode' ...(中略)... Rails::Initializer.run do |config| ...(中略)... config.gem "gettext", :lib => "gettext/rails" end
configフォルダ内の変化
その他にもconfigフォルダ内を以前と比較してみると、以下のような変化が起こっていた。(以下の設定はRails2.1プロジェクトとして始めれば最初から設定されていることだが、Rails2.0.2からバージョンアップした現状は設定されていない状態。それでも見た目上は正常に稼働している。)
- config/initializers/new_rails_defaults.rbが追加された。(Rails3の準備?)
# These settings change the behavior of Rails 2 apps and will be defaults # for Rails 3. You can remove this initializer when Rails 3 is released. # Include Active Record class name as root for JSON serialized output. ActiveRecord::Base.include_root_in_json = true # Store the full class name (including module namespace) in STI type column. ActiveRecord::Base.store_full_sti_class = true # Use ISO 8601 format for JSON serialized times and dates. ActiveSupport.use_standard_json_time_format = true # Don't escape HTML entities in JSON, leave that for the #json_escape helper. # if you're including raw json in an HTML page. ActiveSupport.escape_html_entities_in_json = false
--- /rails202/config/environment.rb 2008-06-21 14:55:29.000000000 +0900 +++ /rails210/config/environment.rb 2008-06-21 15:15:06.000000000 +0900 # 自分が変更したバージョン番号 # Specifies gem version of Rails to use when vendor/rails is not present -RAILS_GEM_VERSION = '2.0.2' unless defined? RAILS_GEM_VERSION +RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION # このアプリケーションに依存するgemを指定することができるようだ。 # ここで指定したgemは「rake gems:install」でインストールできるらしい。 + # Specify gems that this application depends on. + # They can then be installed with "rake gems:install" on new installations. + # config.gem "bj" + # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net" + # config.gem "aws-s3", :lib => "aws/s3" # 新たに追加されたタイムゾーンの指定 + # Make Time.zone default to the specified zone, and make Active Record store time values + # in the database in UTC, and return them converted to the specified local zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Uncomment to use default local time. + config.time_zone = 'UTC' # 以前のタイムゾーンの設定部分は削除されていた - # Make Active Record use UTC-base instead of local time - # config.active_record.default_timezone = :utc
その他
- Rails2.0.2で悩んだvisual_effectの:startcolorオプションのエラー問題は、同じ箇所のソースの変更はなかったので、自分の環境では同じく対策が必要だと思う。(もしかしたら自分の使い方が間違っているのだろうか?)
- render :partialカウンターの挙動が変わっていた。(「パーシャルファイル名_counter」という命名規約によるカウンター変数の挙動)
参考ページ
- 主な変更点はひげろぐさんのところで確認させてもらいました。(感謝です!)
- あわせて、詳細な変更点もPDFで公開されているらしい。(英語であるが、ダウンロードしておいた。)
- Ruby On Rails ピチカート街道さんでリリース前からRails2.1の詳細解説中でした。(感謝です!)
- 細かな変化がとてもよく分かる!(感謝です!)
- 詳細な変更点のPDF日本語版が出ていた!(大感謝!やっぱり日本語がわかり易い。)
所感
- Railsのバージョン0.1の違いは何らかの試練あり。(0.0.1の違いならおそらく試練無し)