おそらく同じパターンで困っている人と、同じエラーで躓くであろう未来の自分のために書く。
Rails でDeviceを利用している際に遭遇。 発生するタイミングはCentOSかUbuntuのDocker上でしか再現しないという奇妙なエラー (Mac OSとWindowsでは問題なく動作する)
User クラスを使用するページへアクセスすると以下のエラーになる。
uninitialized constant User::SessionsController
結論
以下の様にして解決
config/initializers/requirements.rb
require Rails.root.join("app/models/user.rb") require Rails.root.join("app/controllers/User/sessions_controller.rb")
解決までの流れ
uninitialized constant = 「定義したクラスを読むことができない」
なので
Railsのお作法に習って以下のファイルを追加する。
このconfig/initializers
配下のファイルはRails起動時に勝手に読み込まれる
config/initializers/requirements.rb
Userクラスが読み込まれていないので中身は以下の様にする
require Rails.root.join("app/models/user.rb")
結果、同じエラーが出る
uninitialized constant User::SessionsController
このファイル実は読み込まれていないのではないかと思い、
ファイルの中身をエラーが発生するようにして、rails restart
する
結果、当該ファイルでエラーが発生するので 読み込まれている様だ。
/usr/src/rails_build_docker/config/initializers/requirements.rb:1:in `<main>': undefined method `ressssquire' for main:Object (NoMethodError) Did you mean? require ubuntu@ip-172-31-29-8:~/rails_broken_app$
尚更タチが悪い。
ここで、SessionsController
が読み込まれていないのならconfig/initializers
で読み込ませれば良いのでは?
ということに気づく。
config/initializers/requirements.rb
require Rails.root.join("app/models/user.rb") require Rails.root.join("app/controllers/User/sessions_controller.rb")
とすると、sign_inページにアクセスしても当該エラーが表示されなくなった。