Migrate Rails5 to 7

2023-09-13

あまり一般性はありません。社内プロジェクト向けのメモに近いです。Rails5で動作するプロジェクトを7対応に書き直した際の記録です。

Gemfileの更新

# バージョン番号を更新
gem 'rails', '~> 7.0'
gem 'mysql2', '~> 0.5'
gem 'rmagick', '~> 4.2'
gem 'rails-i18n','~> 7.0'
# 削除
# gem 'therubyracer', platforms: :ruby
# gem 'spring-watcher-listen', '~> 2.0.0'
# gem 'record_with_operator', '~>1.0'
# gem 'twitter-bootstrap-rails', '~> 3.2', '>= 3.2.2'
# 新規追加
gem 'net-smtp', '~> 0.3'
gem 'net-pop', '~> 0.1'
gem 'net-imap', '~> 0.2'

Gemfile.lockを一度削除してから、bundle installを実行します。

設定の更新

config/master.key を作成して設置します。credentials.yml.encで管理するキーがなければそのまま、secrets.ymlなどで管理されているキーがあれば、移行します。

動作しなくなっていた設定値を変更、削除。

config/test.rb

config.cache_classes = false

config/initializers/newframeworkdefaults.rb

# ActiveSupport.halt_callback_chains_on_return_false = false

config/environments/production.rb

  config.assets.js_compressor = Uglifier.new(harmony: true)

config/storage.yml ActiveStorageを利用していない場合でも、これがないとエラーになることがあります。中身は空で構いません。

???

ActionView::Helpers::FormBuilder.send :include, FormErrorsHelper

以下はRails7には直接関係ないですが、DB上に絵文字も格納できるようにするための変更。

config/database.yml

encoding: utf8mb4

モデルの更新

app/models/user.rb

has_many :role_objs, class_name: "Role"

利用できなくなったgemの代用

vendorフォルダに、bootstrapとrecordwithoperatorのソースコードを直接設置して、必要な箇所でincludeして使うことにしています(もっとベターなやりかたがあるかも)。

application.js から以下を削除

//= require twitter/bootstrap

bootstrapandoverrides.css から以下を削除

=require twitter-bootstrap-static/bootstrap
=require twitter-bootstrap-static/sprites

app/helpers/application_helper.rb に追記。

require Rails.root.to_s + '/vendor/bootstrap.rb'
include BootstrapFlashHelper

public/fontsフォルダにglyphiconsのフォントファイルを設置。