NoMethodError

DeprecationProxy を継承したクラス DeprecatedConstantProxywarn がエラーを起こす。

NoMethodError: private method `warn' called for nil:NilClass

原因

何れかの gem で Kernel.requirepublic としてオーバーライドしている。

対処法

Kernel.require のオーバーライドを private にする。

Kernel.define_singleton_method(:require) { ... }
Kernel.send(:private, :require)

参考:

Use `Kernel.require` in `DeprecationProxy` by wagenet · Pull Request #32458 · rails/rails – GitHub

FrozenError

middlewares に追加しようとして FrozenError が発生する。

FrozenError: can't modify frozen Array

対応策

eager_load を無効にする。

config.eager_load = false

参考:

FrozenError: can’t modify frozen Array when adding devServer middleware · Issue #1700 · rails/webpacker – GitHub

halt_callback_chains_on_return_false

NoMethodError が発生する。

NoMethodError: undefined method `halt_callback_chains_on_return_false=' for ActiveSupport:Module

原因:

Rails 4 との後方互換のために用意されていた設定項目 halt_callback_chains_on_return_false のアクセッサーが廃止されたため。

対処法:

config/initializers/new_framework_defaults.rb 内で該当する行をコメントアウトする。

参考:

既存のアプリの Rails のバージョンをあげた際に rails s が立ち上がらない – Qiita

Rails 5 の新フレームワークデフォルト設定ファイルでアップグレード作業を軽減する | TechRacho

mysql2 のバージョン指定

Rails5 (<= 5.1.5) でバージョン 0.5.x 系の mysql2 が使用できない。Gem::LoadError が発生する。

Gem::LoadError: Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).

原因:

ActiveRecord で使用可能な mysql2 のバージョンが制限されていて、0.5.x 系の mysql2 を読み込まない。

対処法:

ActiveRecord で使用可能な mysql2 のバージョンを Gemfile で指定する。使用可能な 0.4.x 系の mysql2 は 0.4.4 以降。

gem "mysql2", "~> 0.4.4"

もしくは、0.4.x 系の最新バージョンを指定して、

gem "mysql2", "~> 0.4.10"

あるいは、Rails 5.1.6 で修正済みなので、Rails 5.1.6 以降を使う。

gem "rails", ">= 5.1.6", "< 6"
gem "mysql2", ">= 0.5.0", "< 0.6

もしくは、

gem "rails", "~> 5.2"
gem "mysql2", "~> 0.5.2"

参考:

mysql2 と Rails の組み合わせでエラーが発生する | 人と情報

Rail5 でアップデートしたら mysql2 でエラーになった場合の対処方法 | ゼロイチ

Rails4 で mysql2 gem を指定してるのに「Gem::LoadError Specified ‘mysql2’」とでたら gem バージョンを下げると直るかも – Qiita

Rails で MySQL 動かないときの対処法 | 動かざることバグの如し

Support mysql2 0.4.x and 0.5.x by sodabrew · Pull Request #32310 · rails/rails – GitHub

9f5477a – Support mysql2 0.4.x and 0.5.x by sodabrew · Pull Request #32310 · rails/rails – GitHub

“Specified ‘mysql2’ for database adapter, but the gem is not loaded” when upgrading to 0.5.0 · Issue #950 · brianmario/mysql2 – GitHub

Gem::LoadError – rails/connection_specification.rb at v5.1.5 · rails/rails – GitHub

mysql2 – rails/mysql2_adapter.rb at v5.1.5 · rails/rails – GitHub

mysql2 – rails/mysql2_adapter.rb at v5.1.6 · rails/rails – GitHub

Gem::LoadError for mysql2 gem, but it’s already in Gemfile – Stack Overflow

Gem::LoadError: Specified ‘mysql2’ for database adapter, but the gem is not loaded – Stack Overflow

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です