私が所属する会社で開発・運営しているウェブサービスはRails4.2系で動いていましたが、その中1つのサービスをRails4.2.6からRails5.0.0へとバージョンアップしましたので、その際に発生した問題とそこで得られた知見を今回の記事でお話ししようと思います。
移行の際にはこちらの記事を参考にさせていただきました。
gemのupdate
railsを5に上げる際に依存関係を解消するためにgemのバージョンを一気に最新にしましたが、rubygemsにrails5対応のバージョンが上がってなかったり、上がっていたとしても実行時にDEPRECATION WARNINGが出たりしていました。多くのgemは既にmasterではrails5やDEPRECATION WARNINGに対応した物が出ているので
gem ‘hogehoge’, github: ‘hogehoge’
といった形でgithubから直でmasterブランチの内容を引っ張ると解消できることが多かったです。以下が実際に今引っ張っているものです。
- rails-perftest
- activemodel-serializers-xml
- sinatra
- ransack
- gretel
- enumerize
- heroku-deflater
Rails5の書き方に合わせる
DEPRECATION WARNINGやエラーが幾つか出るので、古い書き方から新しい書き方へ直します。
- paramsをpermitしてからurlに変換する
- 最悪、unsafe_hでパラメータクラスからHashに変換できるが余りよろしくない
- ActiveRecord::Baseから継承せずにApplicationRecordというabstractクラスを作ってそれを継承する
- merge! -> mergeに変更
- error[‘hogehoge’] = ‘hoge’ -> error.add(‘hogehoge’, ‘hoge’)に変更
- ActiveRecordのuniqをdistrunctに変更
- destroy_all(condition) -> where(condition).destroy_allに変更
終わりに
この記事は自ブログからの転載となっています
もし良かったらブログもどうぞ
https://hackalive.net