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週間の初心者なので、その目線でわかりやすく書くことを心がけました。
わかりにくい記述、間違っているところがあればご指摘ください。
最後まで見ていただきありがとうございました。