背景
rails s
を実行し、ローカル環境のURLにアクセスすると、
ごくたまに PG::ConnectionBad
というエラーを見ることがあります。
ローカル環境で PostgreSQL
と Rails
の接続が上手くいかないことが原因なのだと理解しているのですが、毎回復旧手順をググっているなと思い観念してまとめます。
前提
-
postgresql
のバージョン10.5
$ brew info postgresql
postgresql: stable 10.5 (bottled), HEAD
Object-relational database system
https://www.postgresql.org/
発生事象
rails s
を実行して、サーバー起動し、
開発環境URLにアクセスすると以下のような画面になる!
Rails側
と ローカルのPostgreSQLの接続
が上手くいってないっぽい...
手順1 : psコマンド
ps aux | grep 確認したいプロセス名
で現在の起動状態を確認する
$ ps aux | grep postgres
fuqda 2272 0.0 0.0 4286184 904 s000 R+ 6:42PM 0:00.00 grep --color=auto postgres
grep --color=auto postgres
とだけ表示されている場合は、
先ほどのコマンドのプロセスだけが見つかったということなので postgres
本体は動いてないことを確認
手順2 : tailコマンド
tail
コマンドで postgres
が起動された時に作られるファイルの存在を確認する
$ tail /usr/local/var/postgres/server.log
2017-12-18 17:18:51.032 JST [31764] FATAL: lock file "postmaster.pid" already exists
2017-12-18 17:18:51.032 JST [31764] HINT: Is another postmaster (PID 31311) running in data directory "/usr/local/var/postgres"?
lock file "postmaster.pid" already exists
が表示されたので、
postgres
が正常に終了した場合に消される、プロセスが存在することを表すファイルが残ってしまっていることがわかる
手順3 : rmでゴミファイルを消す
とりあえずそのゴミファイル(postmaster.pid
)を消す
$ rm /usr/local/var/postgres/postmaster.pid
手順4 : launchctlコマンドでpostgresql.plistファイルをロードし直す
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
手順5 : psコマンドで再度postgresの起動を確認
$ ps aux | grep postgres
fuqda 2569 0.0 0.0 4287208 936 s000 S+ 6:44PM 0:00.01 grep --color=auto postgres
fuqda 2533 0.0 0.0 4449164 1644 ?? Ss 6:44PM 0:00.00 postgres: bgworker: logical replication launcher
fuqda 2532 0.0 0.0 4304096 924 ?? Ss 6:44PM 0:00.00 postgres: stats collector process
fuqda 2531 0.0 0.0 4449164 1856 ?? Ss 6:44PM 0:00.00 postgres: autovacuum launcher process
fuqda 2530 0.0 0.0 4449164 1108 ?? Ss 6:44PM 0:00.00 postgres: wal writer process
fuqda 2529 0.0 0.0 4449164 1160 ?? Ss 6:44PM 0:00.00 postgres: writer process
fuqda 2528 0.0 0.0 4449164 1060 ?? Ss 6:44PM 0:00.00 postgres: checkpointer process
fuqda 2523 0.0 0.1 4449420 17012 ?? S 6:44PM 0:00.04 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres
これでOK