【再起動して解決】connections on Unix domain socket “/tmp/.s.PGSQL.5432”?への対処

エラーコードにいらつく

Ruby on Rails でアプリをつくったりスクールの課題をシコシコ進めているとたまに出てくるエラーコード

connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

新しくテーブルつくった、カラムを追加した際にマイグレーションをかけようとしたとき、よく出てきます。

↓こんな感じ。

 $ bin/rake db:migrate

Running via Spring preloader in process 4024 rake aborted! PG::ConnectionBad: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

これまでメンターの手を借りて、なんとか解決していたのですが、正直一体何が起こっているのか分かってなかったので 今回自力での解決に挑戦してみます。

エラーコードでググってみる。

connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

ググる

日本語やら英語サイトやら混同して出てくる。

けどpostgresをインストールしなおしたり
怪しげなパッチを入れたりとで正直良くわかんない。

対処療法的にちょっと割り切れなかったので、英語のQ&Aサイトスタックオーバーフローを見て回ることに。

うへぇ英語・・・orz

そこに書かれている内容をなぞりながら考察を加えていこうと思います。

解決までのプロセス

postgresをアップロードしてみる

まず打つように書かれたコマンドは


brew install postgres

バージョン管理ソフトhomebrewを使って,postgreをアップロードするっぽい。

途中まで無事に進んでるっぽかったんですが、後半部分に怪しげなエラーが。

Please delete these paths and run `brew update`.
Error: postgresql-9.6.1 already installed
To install this version, first `brew unlink postgresql`

linkファイル=windowsでいうシートカット
がおかしいから一度はずしてもう1回linkしなおしてちょんまげ
と解釈。

linkファイルの再構成

というわけで先のエラーコード末尾に書かれていた下記コマンドを入力。

$ brew unlink postgresql
Unlinking /usr/local/Cellar/postgresql/9.6.1... 375 symlinks removed

うむ、なんかうまくいったっぽい。もう一度linkをつけなおす。

$ brew link postgresql
Linking /usr/local/Cellar/postgresql/9.6.1... 375 symlinks created

bin/rake db:migrate を打つも解決せず。

うまくいったかなと再度


bin/rake db:migrate

と打つが・・・・

$ bin/rake db:migrate
Running via Spring preloader in process 5345
rake aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
-e:1:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

、変わらず。うそかーい。

servicesのインストール・起動

でスタックオーバーフローの次の工程をみると、下記コマンドが。


brew tap homebrew/services

homebrewのservicesという機能を追加するっぽい。
なんじゃservicesて。って調べたらでてきました。

Homebrew Servicesを使ってサービスを管理する

ローカルのデータベースを手動で制御するソフトっぽい。

このservicesを使ってpostgreを再起動させます。

いったんスタートさせ

$ brew services start postgresql
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)

止めて

$ brew services stop postgresql
Stopping `postgresql`... (might take a while)
==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)

再起動。

$ brew services restart postgresql
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)

いずれも成功。

再度 bin/rake db:migrate で無事成功!

今度こそ!

$ bin/rake db:migrate
Running via Spring preloader in process 6179
== 20170227063114 CreateComments: migrating ===================================
-- create_table(:comments)
-> 0.0594s
== 20170227063114 CreateComments: migrated (0.0596s) ==========================

えがった・・・。

ふりかえり

結局、postgreを手動で再起動したことで復活した感じ。
クラウドの仮想開発環境 cloud9 では一定時間が経過するとデータベースが止まってしまうため

sudo service postgresql start

を打ち込んで都度再起動してましたが

ローカル開発環境でも、たまーに同じことが起こるんでしょうかね。
電源切らない限りずっと動いてるんかと思ってましたワイ。

 

今日の一句

“ローカルも たまに休憩 はさみます(多分)”

 

コメントを残す

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