3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AtraeAdvent Calendar 2017

Day 5

rails5.2への準備を整える

Last updated at Posted at 2017-12-05

はじめに

rails5.2のβ版が出ていよいよマイナーのバージョンも上がりそうですね。
githubはこちら

そういえば地球防衛軍も12/7にいよいよ、こちらも5が発売ですね!!!
スクリーンショット 2017-12-02 1.45.04.png

今年の春頃に「夏リリース予定!」となっていたのに気がついたら「年内リリース」という表記に変わってあれ?と思った矢先「12/7リリース」となっていてテンションが上がった記憶があります。

ということでrails4系をまだ使っている人は地球防衛軍新作リリースということとともにrails5へのアップデート or 準備を済ませて今年を終えましょう!!

準備

スクリーンショット 2017-12-05 8.41.08.png

基本的な流れは以下です。

  • アップデートによりどんな変更点があるのか理解する
  • アップデートの作業
  • バージョンを上げる前に対応できるものがあるなら対応しておく
  • (テスト)
  • 本番へ

今回思ったのがgemやコードの修正点で現バージョンのうちに対応できるものが結構あるということ。なので実際のアップデート作業に入ってバージョンが確定したら「先にそっちだけでも対応できないのか」を考えると良いかもしれません。そうするとエラーも追いやすくなります。

流れに沿ってやって見ます

4.0.13 → 4.2.10

  • まずdocumentを用意する。ほとんどこれを見ながらの作業になります。

rails 4.2 リリースノート
rails 4.2 アップグレードガイド

  • アップグレードガイドを読む。(大きな差異がなければ一気に上げても良いと思います)
今回だと
rails4.0 → rails4.1

- デフォルトスコープの変更
- リレーションに対する破壊的メソッド呼び出し
- JSONの扱いの変更点
- Cookiesシリアライザ

僕の場合はこの辺りが影響ありそうな感じがしました。(この辺はアプリケーション内でどういうコードを書いているのか次第です)
実際に少しコードを調べてみると

- リレーションに対する破壊的メソッド呼び出し

に関しては怒られる書き方が多かったのであらかじめ対応しました。
↓
# 以前の破壊的な呼び出し方法
Author.where(name: 'Hank Moody').compact!
# 今後の破壊的な呼び出し方法
authors = Author.where(name: 'Hank Moody').to_a
authors.compact!

これでrails4.1はクリアなのでrails4.2まで上げることにしました
  • 実際の作業をします。
    • http://railsdiff.org/ を見てGemfileの初期状態での差異を確認します。新しい方に一旦、合わせます。そこから使わないものはコメントアウトなりしてインストールしないようにすれば良いと思います。
    • Gemfileを上記の変更点に従い修正
    • bundle update rails でrailsのバージョンをあげる
    • →gemのバージョンの依存関係でエラーになりますのでそこはエラー文にしたがって対応していく
    • →依存関係の対応するときは僕はここを見てました。https://rubygems.org/gems
    • →ここは頑張るしかないです。通るまで頑張りましょう!
    • bundle update railsが通ったらbundle exec rake rails:updateを実行
    • 終了したらgitで差分の確認をする + http://railsdiff.org/ を見て素のファイル状態の違いを見比べる
ちなみに・・・僕はbundle exec rake rails:updateを実行するときは以下の流れで行いました。

- まずhttp://railsdiff.org/で変更ありそうな箇所のファイルを開いておく
- とりあえず全部Yする!
- 各ファイルが上書きされるのでcommand + z やcommand + shift + zで変更点を確認
- 既存の設定はそのまま残し、初期設定のものはhttp://railsdiff.org/を見て調整する



    conflict  config/boot.rb
Overwrite /Users/katsuyukishimbo/sample/config/boot.rb? (enter "h" for help) [Ynaqdh] Y
       force  config/boot.rb
       exist  config
    conflict  config/routes.rb
Overwrite/Users/katsuyukishimbo/sample/config/routes.rb? (enter "h" for help) [Ynaqdh] Y

あとはテストして反映すれば完了です。

エラーになったところ

  • kaminariでエラー
undefined method `num_pages' for #<Kaminari::PaginatableArray:0x0055a6e50247e8>


params[:page].to_i >= hoge.num_pages - 2
→ params[:page].to_i >= hoge.total_pages - 2
  • attributesの扱いが少し変更されてた
When assigning attributes, you must pass a hash as an argument

user_attributes = params[:user]
→ user_attributes = params[:user].presence || Hash.new
  • リレーション関係を削除するときの扱いが少し変更されていた
 undefined method `state' for #<ActiveRecord::ConnectionAdapters::NullTransaction:0x00555fa46f3930>

user.hoges.each { |obj| obj.delete }
→ user.hoges.each { |obj| obj.destroy }

transactionで囲ってもokです。

4.2.10 → 5.0.4

流れは同じです。

  • document読む

rails 5.0 リリースノート
rails 5.0 アップグレードガイド

ちなみに感覚だとrails4.2→rails5.0へはそこまで変なことは起こらなかった感じがします。
今回だとこれくらい?

- ActiveRecord::Base → ApplicationRecordに変更
- rails4系でwarningだったところがDeprecationWarningに変更されているので対応


ただ
- ActiveRecord::Base → ApplicationRecordに変更
→ app/models/application_record.rbというファイル作って

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end

とするだけなのでそこまで問題にはならない。

エラーになったところ

  • skip_before_filterが死んでいた
ArgumentError: Before process_action callback :redirect_hoge has not been defined

skip_before_filter :redirect_hoge
→ skip_before_filter :redirect_hoge,raise: false
  • Action Mailerでの変更見落としていた
非推奨の*_pathヘルパーをemailビューから削除。 (commit)
非推奨のdeliverメソッドとdeliver!メソッドを削除。 (commit)
  • Action Mailerでの変更見落としていた
非推奨の*_pathヘルパーをemailビューから削除。 (commit)
非推奨のdeliverメソッドとdeliver!メソッドを削除。 (commit)
  • オプションの扱い方が変更されていた
Cannot pass a :size option with a :height or :width option:

= image_tag "hoge/hoge.png", :size=>'18',:width=>'18'
→ = image_tag "hoge/hoge.png", :height=>'18',:width=>'18'

まとめ

rails4.2 → rails5.0系まではそこまで労力かからないと思うのであげてしまった方が良いかなという印象を持ちました!ちなみにrails5.0 → rails5.1はマイナーなのに結構変更点が多く、まだエラーを消せていないので消せたら更新していこうかなと思います。
rails5.1からのSystemTestCase
rails5.2からのActive Storage
など便利そうなのが出てきているので今月中にrails5.0まであげて年末年始で触ってみるというのも良いかもしれません。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?