deviseをインストールしているとconfig/initializers/devise.rbと
config/locales/devise.en.ymlファイルが生成されておらず、、さらにrails g devise userやrails db:migrate:statusしても
NoMethodError: undefined method `devise' for Install (call 'Install.connection' to establish a connection):Class
というエラーが出ました。すでにuserモデル以外のデータべースは作ってあるのでrails db:migrate:statusが出来ないということはコマンドが適用されていないということだと思います。
同じ状態でbundle installからやり直しても解決出来ませんでした。
考えた仮説
このときGemfileにはちゃんとgem 'devise'と記述されていました。ターミナル履歴は以下の通りです。
# ターミナル履歴
bundle install
rails g devise:install
rails g devise user
rails db:migrate
ターミナル履歴におかしいところはない。
しかしconfig/initializers/devise.rbと
config/locales/devise.en.ymlファイルがインストールがされていないので、rails g devise installに問題があるのではないか?
gemはローカルサーバーの再起動をしないと反映されないので、rails g devise installの前に再起動をしていなかったのではないか?
解決方法
調べると、rails g devise installが反映されていないとrails sやrails g devise userやrails db:migrate:statusなど他のコマンドが競合してしまい、コマンドが反映されなくなってしまうようです。
参考記事 : https://qiita.com/ryouzi/items/9c5324ba567109ab2a22
具体的な対処法
- もう一度
bundle install -
routes.rbにあるdevise_for :installもしくはdevise_for :usersというコードを削除する - 2でrailsコマンドが適用されるようになったので
rails db:rollbackでマイグレーションファイルをロールバックする。 -
rails db:migrate:statusでステータス確認 - userテーブルやモデルが作られている場合は
rails d model userで削除 - rails g devise:install
- rails g devise user
- rails db:migrate
最後に
プログラミングを始めて4週間の初心者なので、その目線でわかりやすく書くことを心がけました。
わかりにくい記述、間違っているところがあればご指摘ください。
最後まで見ていただきありがとうございました。