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テーブルが作成できたようだ。
そして、エラーが解消していた。
ミッションコンプリート。
コメントを残す