deviseの関連ファイルが作られず、コマンドが適用されなくなった時の対処法


deviseをインストールしているとconfig/initializers/devise.rb
config/locales/devise.en.ymlファイルが生成されておらず、、さらにrails g devise userrails 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 srails g devise userrails db:migrate:statusなど他のコマンドが競合してしまい、コマンドが反映されなくなってしまうようです。
参考記事 : https://qiita.com/ryouzi/items/9c5324ba567109ab2a22

具体的な対処法
1. もう一度bundle install
2. routes.rbにあるdevise_for :installもしくはdevise_for :usersというコードを削除する
3. 2でrailsコマンドが適用されるようになったのでrails db:rollbackでマイグレーションファイルをロールバックする。
4. rails db:migrate:statusでステータス確認
5. userテーブルやモデルが作られている場合はrails d model userで削除
6. rails g devise:install
7. rails g devise user
8. rails db:migrate

最後に

プログラミングを始めて4週間の初心者なので、その目線でわかりやすく書くことを心がけました。
わかりにくい記述、間違っているところがあればご指摘ください。
最後まで見ていただきありがとうございました。