10. Rails 4.2 へのアップデート

Release 3.0.0

一度、master へのマージを試してみたかったので、とりあえず、現在の状態を release 3.0.0 としてリリースし、master とマージした。Rails による校務支援システムとしては第三世代なので、3.0.0 からスタートした。3.1.0 を公開版の最初のリリースにすることにして、開発は 3.0.x として進めていく。今回のマージで、release, master, develop, feature のすべてのブランチが同じ状況になった。

こうやって開発していくうちに Rails の 4.2 がリリースされてしまった。今回は、4.2 の便利な機能を使いたいので、3.0.0 を Rails 4.2 ベースにアップデートしてみる。

Rails 4.2 へのアップデート

まず、feature/updateRailsTo4.2 ブランチを切った。最悪人柱で失敗してもここまでは戻れる。また、4.2 の方がすぐに対応できないようであれば、別の feature では別の機能の開発もしていける。

早速、Gemfile の Rails バージョンを 4.2 に修正する。

gem 'rails', '4.2.0'

bundle update する。いくつか関係ないものも上がっている気はする。

$ bundle update
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Installing i18n 0.7.0 (was 0.6.11)
Installing activesupport 4.2.0 (was 4.1.8)
Installing rails-deprecated_sanitizer 1.0.3
Installing rails-dom-testing 1.0.5
Installing loofah 2.0.1
Installing rails-html-sanitizer 1.0.1
Installing actionview 4.2.0 (was 4.1.8)
Installing rack 1.6.0 (was 1.5.2)
Installing actionpack 4.2.0 (was 4.1.8)
Installing globalid 0.3.0
Installing activejob 4.2.0
Installing actionmailer 4.2.0 (was 4.1.8)
Installing activemodel 4.2.0 (was 4.1.8)
Installing arel 6.0.0 (was 5.0.1.20140414130214)
Installing activerecord 4.2.0 (was 4.1.8)
Installing railties 4.2.0 (was 4.1.8)
Installing guard 2.10.5 (was 2.10.4)
Installing guard-compat 1.2.0 (was 1.1.0)
Installing jbuilder 2.2.6 (was 2.2.5)
Installing jquery-rails 4.0.2 (was 3.1.2)
Installing rails 4.2.0 (was 4.1.8)
Your bundle is updated!

アップデートの rake task を実行する。とりあえず全て上書きする。

$ bin/rake rails:update
    conflict  config/boot.rb
Overwrite /Users/hkob/rails/webcit3/config/boot.rb? (enter "h" for help) [Ynaqdh] 
       force  config/boot.rb
       exist  config
    conflict  config/routes.rb
Overwrite /Users/hkob/rails/webcit3/config/routes.rb? (enter "h" for help) [Ynaqdh] 
Overwrite /Users/hkob/rails/webcit3/config/routes.rb? (enter "h" for help) [Ynaqdh] 
       force  config/routes.rb
    conflict  config/application.rb
Overwrite /Users/hkob/rails/webcit3/config/application.rb? (enter "h" for help) [Ynaqdh] 
       force  config/application.rb
   identical  config/environment.rb
    conflict  config/secrets.yml
Overwrite /Users/hkob/rails/webcit3/config/secrets.yml? (enter "h" for help) [Ynaqdh] 
       force  config/secrets.yml
       exist  config/environments
    conflict  config/environments/development.rb
Overwrite /Users/hkob/rails/webcit3/config/environments/development.rb? (enter "h" for help) [Ynaqdh] 
       force  config/environments/development.rb
    conflict  config/environments/production.rb
Overwrite /Users/hkob/rails/webcit3/config/environments/production.rb? (enter "h" for help) [Ynaqdh] 
       force  config/environments/production.rb
    conflict  config/environments/test.rb
Overwrite /Users/hkob/rails/webcit3/config/environments/test.rb? (enter "h" for help) [Ynaqdh] 
       force  config/environments/test.rb
       exist  config/initializers
    conflict  config/initializers/assets.rb
Overwrite /Users/hkob/rails/webcit3/config/initializers/assets.rb? (enter "h" for help) [Ynaqdh] 
       force  config/initializers/assets.rb
   identical  config/initializers/backtrace_silencers.rb
    conflict  config/initializers/cookies_serializer.rb
Overwrite /Users/hkob/rails/webcit3/config/initializers/cookies_serializer.rb? (enter "h" for help) [Ynaqdh] 
       force  config/initializers/cookies_serializer.rb
   identical  config/initializers/filter_parameter_logging.rb
   identical  config/initializers/inflections.rb
   identical  config/initializers/mime_types.rb
   identical  config/initializers/session_store.rb
   identical  config/initializers/wrap_parameters.rb
       exist  config/locales
   identical  config/locales/en.yml
       exist  bin
   identical  bin/bundle
    conflict  bin/rails
Overwrite /Users/hkob/rails/webcit3/bin/rails? (enter "h" for help) [Ynaqdh] 
       force  bin/rails
   identical  bin/rake
      create  bin/setup

SourceTree でgit 差分を確認し、変更された点を確認しておく。上書きされて消された部分は SourceTree で部分ごとに復元できる。このあたりは SourceTree でやっていると楽になる。

config/boot.rb
bundler/setup が強制的に読み込まれるようになった
config/routes.rb
自分たちが加えたルートの変更だけだったのでルート設定を復元した
config/application.rb
require が rails/all に統合された。config.active_record.raise_index_transactional_callbacks = true が追加された。これらの変更はステージに上げ、自分で追記した generator の設定は復元した。
config/secrets.yml
git に残していないファイルだが確認したところ、 secret_key_base が変わっただけだった。
config/environments/development.rb
config.assets.digest = true が追加された。
config/environments/production.rb
コメントの文章の大文字・小文字が変更されているところが多い。機能に関係するところだけ記載する。一つ目は config.serve_static_assets が config.serve_static_files という名前に代わり、内容も false から ENV[‘RAILS_SERVE_STATIC_FILES’].present? に変わった。今までは、false や true を決め打ちだったが、Rails が静的ファイルを扱いたい場合には、上記環境変数を定義するだけでよくなったようだ。二つ目は config.log_level が :info から :debug に落とされた。三つ目は、config.autoflush_log = false に関する記載がなくなった。機能が実際になくなったのかどうかは不明
config/environments/test.rb
production と同じで config.serve_static_assets が config.serve_static_files に変わった。また、config.active_support.test_order = :random が追加された。これは Upgrading の 2.4 に書かれている項目である。
config/initializers/assets.rb
Rails.application.config.assets.paths の設定方法のコメントが追加された。自分で書いた assets.precompile の部分が消されたので戻しておく。
config/initializers/cookies_serializer.rb
最後の改行の違いだけだった。
bin/rails
スペースの数の違いだけだった。
bin/setup
ブート時に bundle の設定、データベースの設定、log の削除や restart.txt の設定をするファイル。ログの削除は問題かもしれないので、後日削除するかも。

4.1 → 4.2 固有のアップデート項目

2.1 の Web Console を追加する。Gemfile に web-console を追加する。

# Web Console
gem 'web-console', '~> 2.0'

bundle install する。

$ bundle install
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Installing debug_inspector 0.0.2
Installing binding_of_caller 0.7.2
Installing web-console 2.0.0
Your bundle is complete!
It was installed into ./vendor/bundle

これ以外は特に問題はない気がする。

bin/guard でのローカルテスト、bin/rails s でのブラウザでのテストも通過したので、コミットした。その後、develop とマージして Jenkins での自動テストも通過した。updateRailsTo4.2 ブランチはもう必要なくなったので削除した。

今日はここまで。

written by iHatenaSync