Help us understand the problem. What is going on with this article?

いい加減覚えたい!RailsアプリでローカルのPostgreSQLが起動していないときの復旧手順

背景

rails s を実行し、ローカル環境のURLにアクセスすると、
ごくたまに PG::ConnectionBad というエラーを見ることがあります。
ローカル環境で PostgreSQLRails の接続が上手くいかないことが原因なのだと理解しているのですが、毎回復旧手順をググっているなと思い観念してまとめます。

前提

  • 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の接続 が上手くいってないっぽい...

スクリーンショット 2018-11-26 18.39.46.png

手順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 本体は動いてないことを確認 :skull:

手順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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away