自分用備忘録です。初心者なので、間違っていることや、理解が違っていることがありましたら、教えていただけると幸いです。
問題
deviseでメール認証機能をつけたアプリをherokuにデプロイしようとした際、dbが見つからないというエラーが出た。
解決方法
database.ymlファイルのproductionに
url: <%= ENV['DATABASE_URL'] %>
を追加する。
[解決までの過程(記録用)]
deviseで管理者機能をつけたアプリをherokuにデプロイ。
% git push heroku master
HerokuのダッシュボードのResourcesからadd on設定
postgresqlを選択
データベースの設定が完了したので、
% heroku run rails db:migrate
下記のエラーが発生しました。
Running rails db:migrate on ⬢ hidden-journey-83088... up, run.8327
rails aborted!
ActiveRecord::ConnectionNotEstablished: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory (ActiveRecord::ConnectionNotEstablished)
Is the server running locally and accepting connections on that socket?
以前にも見たことあるPGSQL.5432" failed:エラーをみつけたので、dbが見つからないというエラーであることがわかった。デプロイは成功しているので、herokuで設定したdbとうまく接続ができていないのだと推測。
railsガイドを見てみると
Railsガイド
database.ymlのproductionに
url: <%= ENV['DATABASE_URL'] %>
を記述した。これは、Heroku環境でアプリがHerokuのPostgreSQLデータベースに接続できるようにするための設定です。
url: <%= ENV['DATABASE_URL'] %>は、Herokuでデータベース接続情報(URL)が環境変数DATABASE_URLとして提供されているため、その環境変数を使用して接続設定を行います。
Herokuでは、環境変数としてデータベースのURLが自動的に設定されているため、database.ymlのproduction環境でDATABASE_URLを使用することで、HerokuのPostgreSQLに接続できます。
再度変更したアプリをデプロイして、もう一度試してみる。
(念の為herokuで直接作成したdbを消して新たに作る)
コマンドで新しくDatabaseを作る。
% heroku addons:create heroku-postgresql
% heroku run rails db:migrate
で実行できました!
なぜ設定ができていなかったのか、よくわかりませんが、解決してよかったです。