DocBaseをRails5にアップデートしました このエントリをはてなブックマークに登録

2017年06月01日

ダニーダニー / ,

はじめに

今年の3月にDocBaseのRailsのバージョンを4系から5系にアップデートしました。

今回はDocBaseだけではなく、他のRailsで作られている他のアプリをRails5にアップデートする時でも参考になりそうな部分をまとめました。

gem

squeel

2015年から開発が止まっているのとRails5対応しないのとwhereでplaceholderを使えば済むので外しました。

- Post.where.has { created_at < 3.days.since }
+ Post.where('created_at < ?', 3.days.since)

どうしても使いたい場合は書き換えは必要ですが、baby squeelはメンテされてるのでそちらに移行するという手もあると思います。

quiet_assets

https://github.com/rails/sprockets-rails/pull/355

Rails5から標準で取り込まれたので別途導入する必要がなくなりました。

rails_12factor

https://github.com/heroku/rails_12factor#migrating-to-rails-5

Migrating to Rails 5を参考に修正することで、Rails 5から必要がなくなりました。

rails-observers

RubyGemsにRails 5に対応したバージョンがなかっためgithubリポジトリから取得するように変更しました。

https://github.com/rails/rails-observers

haml_coffee_assets

https://github.com/emilioforrer/haml_coffee_assets/issues/152

RubyGemsのものでは動かず、githubのリポジトリから取得するようにしました。

draper

Rails 5の場合対応してるのが3.0.0pre1だったのでアップデートしました。 http://yamakichi.hatenablog.com/entry/2016/08/26/235117

rails-controller-testing

http://rspec.info/blog/2016/07/rspec-3-5-has-been-released

For new Rails apps: we don’t recommend adding the rails-controller-testing gem to your application. The official recommendation of the Rails team and the RSpec core team is to write request specs instead.

Rails 5からassingsをコントローラーテストで使えなくなりました。代わりにrequest specに置き換えるのが推奨されました。
assingsを大量に使ってる箇所がありrequest specに置き換えるのが大変だったためrails-controller-testingを使うことにしました。
rails-controller-testingを導入することで今まで通りassingsを使えるようになります。

mail_views

Rails標準のActionMailer::Previewに移行しました。

settingslogic

Rails標準のconfig.xに移行しました。

ActiveRecord

Unsupported argument type: Hash. Construct an Arel node instead.

- scope.joins(:tags).group(tags: :name).count
+ scope.joins(:tags).group(Tag.arel_table[:name]).count

ハッシュで指定できなくなったのをArel nodeを使うように直しました。

DEPRECATION WARNING

DEPRECATION WARNING: uniq is deprecated and will be removed from Rails 5.1 (use distinct instead).

- User.group_members(@before[:group_ids] | @after[:group_ids]).uniq
+ User.group_members(@before[:group_ids] | @after[:group_ids]).distinct

uniqをdistinctに置き換えです。

DEPRECATION WARNING: ActionController::TestCase HTTP request methods will accept only keyword arguments in future Rails versions.

- before { get :index, id: team.id }
+ before { process :index, method: :get, params: { id: team.id } }

コントローラーテストの書き方が変わったのが原因で、この修正箇所は多かったです。

DEPRECATION WARNING: Passing a class as a value in an Active Record query is deprecated and will be removed.

- expect(Tracking.where(item_type: Team).last.user).to eq user
+ expect(Tracking.where(item_type: 'Team').last.user).to eq user

文字列で渡さないといけなくなったのでその修正です。

DEPRECATION WARNING: The error key `:restrict_dependent_destroy.many` has been deprecated and will be removed in Rails 5.1. Please use `:restrict_dependent_destroy.has_many` instead.

attributes:
  base:
    restrict_dependent_destroy:
      - many: グループに属しているメモがあるので削除できません
      + has_many: グループに属しているメモがあるので削除できませ

翻訳のキー名の変更です。

DEPRECATION WARNING: Directly inheriting from ActiveRecord::Migration is deprecated.

- class CreatePlans < ActiveRecord::Migration
+ class CreatePlans < ActiveRecord::Migration[4.2]

migrationファイル作成時にその時のRailsのバージョンが入るようになったのでその対応です。

まとめ

かかった日数

ここに書いてない修正やコードレビューやステージング環境での動作確認を含み約2週間でした。

良かった点

  • テストコードがあったのでアップデートによって動かなくなった処理を特定しやすかった
  • 長期間メンテするRailsアプリの場合はテストコード書くのが重要
  • あまり使ってないgemの整理ができた

大変だった点

  • どれ位の修正でアップデートできるかどうかの終わりが見えない状態
  • gemが動かなくなるケースはRailsがアップデートしたのが原因の場合とRailsのアップデートは関係なく普段gemのアップデートしてなかったのが原因の場合があった
  • テストコード以外のケースの動作確認

DocBaseについて

DocBaseは情報共有を活発にして組織が力を最大限発揮できるようにすることを目指した情報共有・ドキュメント共有サービスです。

詳しくはこちらから。
https://docbase.io

acfe5f7d-fac5-40de-9a75-554cbee0dfe2

  1. メモからはじめる情報共有 DocBase 無料トライアルを開始
  2. DocBase 資料をダウンロード

「いいね!」で応援よろしくお願いします!

このエントリーに対するコメント

コメントはまだありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


トラックバック

we use!!Ruby on RailsAmazon Web Services

このページの先頭へ