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

はじめに
前回の記事では、ローカルにPostgreSQLをインストールした。
この記事では、Railsで使用していた「sqlite」から「PostgreSQL」にデータベースを変更していく。
GemfileでPosgreSQLを使用するように記述を変更する
公式ドキュメントで言うと以下の部分。

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

変更後はこちら。

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

database.ymlを編集する
以下の箇所を参考に進めていく。

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

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

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のバージョン確認。

次に、postgresqlを起動する。

rake db:createが出来た。

次はマイグレーション
先ほどは、データベースを作成しただけなので、db/migrate/20230323102342_create_posts.rbに書かれている内容をマイグレーションしていく。
公式ドキュメントでは、以下の部分。

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

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というものを確認する。

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

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

20行目を追記した。

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

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

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

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

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

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

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

ミッションコンプリート。
コメントを残す