#author("2019-07-10T07:26:04+00:00","default:wikiwriter","wikiwriter") #author("2019-07-10T07:26:16+00:00","default:wikiwriter","wikiwriter") &tag(Rails/アップグレード/5.1から5.2); *目次 [#h9e0e41e] #contents *関連ページ [#v0ce57e4] *参考情報 [#w8ce8449] -[[Railsアップグレードガイド - Rails ガイド:https://railsguides.jp/upgrading_ruby_on_rails.html#rails-5-1%E3%81%8B%E3%82%89rails-5-2%E3%81%B8%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89]] *手順 [#e2167e1d] -GemfileのRailsのバージョンを5.2系の最新場合に書き換える。他Rails 5.2でデモアプリを作成しGemfileを比較してアップデートしたほうがよさそうなのを更新。 #pre{{ gem 'rails', '5.2.3' #gem 'mysql2', '~> 0.3.18' gem 'mysql2', '>= 0.4.4', '< 0.6.0' # Use Puma as the app server gem 'puma', '~> 3.11' gem 'bootsnap', '>= 1.1.0', require: false group :development do gem 'web-console', '>= 3.3.0' }} -bundle updateする。 bundle update -設定ファイルの更新。古い設定ファイルを上書きしようとしてくるので基本Yesで応える。後からgit diffで差分を見ながら移植したほうがよさげ。 bundle exec rails app:update -IntelliJの場合、「Git > Compare with same repository version」で比較すると変更を戻せる。 *注意点 [#q0aa8ec3] **undefined method `halt_callback_chains_on_return_false=' for ActiveSupport:Module [#a30a4a79] -[[rails 5.1.6 のアプリをrails 5.2.0にアップデートしたときに困ったとこメモ - 脱力系日記:https://tkmr.hatenablog.com/entry/2018/04/19/021252]] -new_framework_defaults.rbから以下の行を削除/コメントアウトする ActiveSupport.halt_callback_chains_on_return_false = false **couldn't find file 'ckeditor/init' with type 'application/javascript [#d8975318] -ckeditor v5.0.0の問題?以下の指定でとりあえず。 gem 'ckeditor', '4.3.0' **本番環境でアセットファイルが表示されない [#n2a1f312] -config/environments/production.rbを確認。 -たいてい以下の2つの設定を有効にすれば良い。 #pre{{ config.public_file_server.enabled = true config.assets.compile = true }} **モデルの依存関係でエラー [#w4fcccb8] -実はRails 5からbelongs_toで指定した依存関係が必須扱いになっていた。 -これを元の挙動にもどすためのinitializerとしてnew_framework_defaults.rbというファイルが存在し、以下のようにして元の挙動にしていた。 Rails.application.config.active_record.belongs_to_required_by_default = false -これがなぜかRails 5.2のタイミングで動かなくなっていた。rails consoleで確認できる。 bundle exec rails console Rails.application.config.active_record.belongs_to_required_by_default #=> false ActiveRecord::Base.belongs_to_required_by_default #=> true -initializerが呼ばれる前にActiveRecord::Baseが初期化されているのが原因で、問題のプロジェクトはrails-settings-cachedが原因の模様。Settingsの継承元のクラスとしてActiveRecord::Baseが指定されており簡単に回避できそうもない。 -そこでapplication.rbに設定を追加することで安直に回避することに。 #pre{{ #pre{{ module Demo class Application < Rails::Application # rails-settings-cachedが存在すると効果がなくなるのでapplication.rbに定義する。 config.active_record.belongs_to_required_by_default = false end end }}