Tag: Rails/アップグレード/5.1から5.2

目次

関連ページ

参考情報

手順

  • GemfileのRailsのバージョンを5.2系の最新場合に書き換える。他Rails 5.2でデモアプリを作成しGemfileを比較してアップデートしたほうがよさそうなのを更新。
    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」で比較すると変更を戻せる。

注意点

undefined method `halt_callback_chains_on_return_false=' for ActiveSupport:Module

couldn't find file 'ckeditor/init' with type 'application/javascript

  • ckeditor v5.0.0の問題?以下の指定でとりあえず。
    gem 'ckeditor', '4.3.0'

本番環境でアセットファイルが表示されない

  • config/environments/production.rbを確認。
  • たいてい以下の2つの設定を有効にすれば良い。
    config.public_file_server.enabled = true
    config.assets.compile = true
    

モデルの依存関係でエラー

  • 実は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に設定を追加することで安直に回避することに。
    module Demo
      class Application < Rails::Application
        # rails-settings-cachedが存在すると効果がなくなるのでapplication.rbに定義する。
        config.active_record.belongs_to_required_by_default = false
      end
    end
    
    

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-07-10 (水) 16:26:16