Rails6からRails7へのアップデートメモ
今更ですが、rails4からrails7までアップデートする必要があったため
Rails4→Rails5
Rails5→Rails6
Rails6→Rails7
のアップデートで手順をまとめていきます。
ここではRails6→Rails7の手順を書いていきます。
事前準備
testが通るようにしておく
testを通るようにしておくと、アップデート後に、どこがエラーになるのか確認しやすいです。
事前にtestが全て通るようにしておきましょう。
Ruby Version
今回はRuby 3.1.2 で対応してます
Railsをアップデート
gemfileの修正
gemのrailsのバージョンを変更する
変更前
gem 'rails', '6.1.4.7'
変更前
gem 'rails', '7.0.3'
railsのupdate
下記コマンドを実行してrailsをupdateします
bundle update rails
設定ファイル更新
以下のコマンドを実行して、Railsの設定ファイル等を更新します。
bundle exec rails app:update
問題なければ上書きして良いでが、
必ず差分を見ながら更新していきましょう。
bundle update
bundle updateを実行して
gemファイルの依存関係などでエラーがある場合は修正しておきます。
bundle update
db:migrate
# migrationファイルができるのでmigrate実行
bundle exec rails db:migrate
エラーを修正
直でSQLを書いている箇所の、limit offsetの値もサニタイズされるようになり、
エラーになってしまったので修正しました
修正前
sql_txt += " ORDER BY ID DESC LIMIT :limit OFFSET :offset"
cond[:offset] = offest
cond[:limit] = limit
修正後
sql_txt += " ORDER BY ID DESC LIMIT #{offset.to_i} OFFSET #{limit.to_i}"
sprockets4対応
manifest.jsに設定を移行しました
/config/environments/以下各ファイルの設定をmanifest.jsに移行
config.assets.precompile += %w(debug/*.js debug/*.css event/*.js event/*.css)
config.assets.precompile += %w(admin/*.js admin/*.css)
/app/assets/config/manifest.js
//= link_tree ../images .gif
//= link_tree ../images .png
//= link_tree ../images .jpg
//= link application.js
//= link application.css
//= link_tree ../javascripts/debug .js
//= link_tree ../stylesheets/debug .css
//= link_tree ../javascripts/event .js
//= link_tree ../stylesheets/event .css
//= link_tree ../javascripts/admin .js
//= link_tree ../stylesheets/admin .css
ES6に対応
precompileでエラーが起きてしまい、調査したところ
actiontextで使用されるjs(ES6)がプリコンパイル対象に自動で追加されていて
アプリがES6に対応してなかったため、これを機にES6に対応しました。
gemfile変更
修正前
gem 'uglifier', '2.7.1'
修正後
gem 'uglifier', '4.2.0'
/config/environments/以下各ファイル
gem 'uglifier', '4.2.0'
修正前
config.assets.js_compressor = :uglifier
修正後
config.assets.js_compressor = Uglifier.new(:harmony => true)
まとめ
Rails6からRails7へのアップデート手順をまとめていきました。
6にアップデートするときに、7へのアップデートを考慮して対応しておいたので
大幅な修正は必要ありませんでした。