sqliteからPostgreSQLにデータベースを変更したら、一覧ページで起こっていたエラーが解消された

はじめに

前回の記事では、ローカルにPostgreSQLをインストールした。

この記事では、Railsで使用していた「sqlite」から「PostgreSQL」にデータベースを変更していく。

GemfileでPosgreSQLを使用するように記述を変更する

公式ドキュメントで言うと以下の部分。

SQLite on Heroku | Heroku Dev Center

Gemfileの以下の箇所を変更した。

変更後はこちら。

そして、bundle installを行った。成功のメッセージが心地よい。

database.ymlを編集する

以下の箇所を参考に進めていく。

SQLite on Heroku | Heroku Dev Center

config/database.ymlは以下のようになっていた。

公式ドキュメントには、adapterをsqlite3からpostgresqlに変更する必要があると書かれている。

SQLite on Heroku | Heroku Dev Center

8行目を変更してみよう。

以下のように変更した。

さらにこちらの対応を行う。

14、21、25行目を変更していく。

公式ドキュメントに倣って、以下のように変更した。

以下のコメントは、SQLiteについて書かれたものなので、削除した。

rake db:createが上手くいかない

次のステップに進んだら、rake db:createのところでエラーが発生した。

rake db:createを打ち込んだ様子。

エラーメッセージはこちら。

connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?
Couldn't create 'my_database_development' database. Please check your configuration.
rake aborted!
ActiveRecord::ConnectionNotEstablished: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?


Caused by:
PG::ConnectionBad: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?

Tasks: TOP => db:create
(See full trace by running task with --trace)

解決を試みる(上手くいかなかった)

【Ruby on Rails】db:createができない #Rails – Qiitaを参考に解決を試みる。

postgres -D /usr/local/var/postgresの確認結果。途中で止まったので、control + Cで強制終了させた。

2024-08-21 08:24:30.794 JST [19070] LOG:  starting PostgreSQL 14.13 (Homebrew) on x86_64-apple-darwin23.4.0, compiled by Apple clang version 15.0.0 (clang-1500.3.9.4), 64-bit
2024-08-21 08:24:30.796 JST [19070] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2024-08-21 08:24:30.796 JST [19070] LOG:  listening on IPv6 address "::1", port 5432
2024-08-21 08:24:30.796 JST [19070] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2024-08-21 08:24:30.800 JST [19071] LOG:  database system was shut down at 2024-08-21 08:23:26 JST
2024-08-21 08:24:30.804 JST [19070] LOG:  database system is ready to accept connections
^C2024-08-21 08:30:26.983 JST [19070] LOG:  received fast shutdown request
2024-08-21 08:30:26.983 JST [19070] LOG:  aborting any active transactions
2024-08-21 08:30:26.985 JST [19070] LOG:  background worker "logical replication launcher" (PID 19077) exited with exit code 1
2024-08-21 08:30:26.985 JST [19072] LOG:  shutting down

postgresqlを起動したら、解決した

原因は、postgresqlを起動していないことだった。

PostgreSQL接続時に「psql: error: connection to server on socket “/tmp/.s.PGSQL.5432” failed:」エラーが出た時の解消 #homebrew – Qiitaを参考にした。

まずは、postgresqlのバージョン確認。

次に、postgresqlを起動する。

rake db:createが出来た。

次はマイグレーション

先ほどは、データベースを作成しただけなので、db/migrate/20230323102342_create_posts.rbに書かれている内容をマイグレーションしていく。

公式ドキュメントでは、以下の部分。

SQLite on Heroku | Heroku Dev Center

マイグレーションファイルに書かれている内容はこちら。

rake db:migrateで、マイグレーションファイルの内容が反映された。

いつものgit操作を行う

毎度お馴染みの、git add . → commit → pushを行った。

本番環境でデータベースが作成されてない

【SQL】ターミナルからHerokuのPostgreSQLにCRUDする – クモのようにコツコツとを参考に、本番環境のherokuでPostgreSQLを起動しようとしたら、データベースがないと言われた。

HerokuでPostgreSQLを使用する

無料でHerokuで簡単にDB[PostgreSQL]を作成する – ゼロからはじめるWEBプログラミング入門を参考にしていく。

Herokuのマイページの右上にあるDataをクリック。

Heroku PostgresのCreate oneをクリック。

右サイドバーにある「Install Heroku Postgres」をクリック。

Order Formが表示される。

Herokuの新しい有料プランのまとめと、無料プラン終了後の個人的な移行方針について – give IT a tryによると、2022年にHerokuは無料プランを終了することを発表したらしい。

登録時には課金されなかったが、クレジットカードの登録は行った。

アプリを作るにはデータベースが必須で、そのデータベースを作るタイミングで課金が必須になるという課金システムだ。

Submit Order Formをクリックする。

その前に以下の部分を入力する必要があるみたいだ。

provisionとは?

規定という意味らしい。準備や支給という意味もある。

おそらく、Postgreを支給するアプリはどれですか?といったニュアンスだろう。

検索したら、インクリメンタルサーチされた。

この画面になった。

毎月5ドルまでなら安い投資だ。データの使用量に応じて課金されるだろうから、それよりも安く済むかもしれない。

Submit Order Formをクリックした。

遷移した画面に、heroku-postgresqlがインストールされたと書かれていた。

postgresqlをインストールしただけではエラーは解決していない

https://money-app-khiro-a414f54be759.herokuapp.com/posts/index のエラーは残っていた。

ローカルではアクセスできている

rails sで起動したローカルサーバーでは上手く行っている。

herokuのpostgresqlをrailsで使用する方法(これを試したら、エラーが解消された)

googleのAIによると、database.ymlにURLと設定を指定する必要があるらしい。

具体的に見ていこう。

Heroku PostgresをRailsアプリで利用する手順 #Rails – Qiitaを参考にした。

まずは、DATABASE_URLというものを確認する。

Heroku PostgresをRailsアプリで利用する手順 #Rails – Qiita

-a <作成したアプリ名>のオプションをつけて、確認することができた。

次に、database.ymlで先ほどのDATABESE_URLを参照するような記述をするらしい。

Heroku PostgresをRailsアプリで利用する手順 #Rails – Qiita

20行目を追記した。

そして、Gemfileで本番環境でpostgresqlを使用するように指定してあげる必要があるみたいだ。

その対応は、すでに行っていた。開発とテスト環境でもpostgreを使用することになっている。

この状態で、プッシュする。

そして、手動デプロイ(自動にしてみてもいいと思う)。

そして、仕上げのマイグレーションを行う。

Heroku PostgresをRailsアプリで利用する手順 #Rails – Qiita

上手くpostsテーブルが作成できたようだ。

そして、エラーが解消していた。

ミッションコンプリート。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

投稿ID : 24210