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

PG::ConnectionBad: could not connect to server: Connection refusedと怒られてからrails serverを立ち上げるまで

rails serverを立ち上げようとしたら

$rails s
I, [2019-09-16T13:57:17.832791 #29176]  INFO -- sentry: ** [Raven] Raven 2.7.1 configured not to capture errors: Not configured to send/capture in environment 'development'
rails aborted!
PG::ConnectionBad: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?

と怒られた。postgresが正常に終了しなかったことが原因らしい。
ちなみにこの状態だと db:migrate もできないはず。
今回はrails serverを再び立ち上げるまでにやったことをここに記す。

私の環境

MacOS Mojave v10.14.5
postgres (PostgreSQL) 11.5
ruby 2.6.4
Rails 6.0.0

やったことまとめ

postgresqlを再インストールして、

$brew reinstall postgres

pidを消し、

$rm /usr/local/var/postgres/postmaster.pid

postgresを停止して、

$launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgesql.plist

postgresを起動して、

$pg_ctl -D /usr/local/var/postgres start

dbを作成して、

$rails db:drop
$rails db:create

rails serverを立ち上げた。

やったことひとつずつ

ググると postgres をちゃんと終了しないと.pidファイルが残っ... がヒットするので、参考にやってみた。

1. postgresの生存確認
$ps aux | grep postgres
you             29213   0.0  0.0  4268040    780 s000  S+    1:57PM   0:00.00 grep postgres

確かに死んでいそう。

2. postgresの身元確認
$tail /usr/local/var/postgres/server.log
tail: /usr/local/var/postgres/server.log: No such file or directory

でた、ノーサッチファイルオアディレクトリ :cry:
念のため次の手順もやってみる。

3. pidをファイルを消す
$rm /usr/local/var/postgres/postmaster.pid
rm: /usr/local/var/postgres/postmaster.pid: No such file or directory

案の定、ないと言われた。

4. postgresのversionを確認してみる
$postgres --version
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
  Referenced from: /usr/local/bin/postgres
  Reason: image not found
Abort trap: 6

なんか怒られた。

ググると npmのエラー解決「dyld: Library not...node dyld: Library not loaded... がヒットする。
なんか再インストールをするとよさそう!

5. postgresqlを再インストール
$brew reinstall postgres
==> Reinstalling postgresql 
==> Installing dependencies for postgresql: openssl@1.1 and readline
.
.
.
==> postgresql
To migrate existing data from a previous major version of PostgreSQL run:
  brew postgresql-upgrade-database

To have launchd start postgresql now and restart at login:
  brew services start postgresql
Or, if you don't want/need a background service you can just run:
  pg_ctl -D /usr/local/var/postgres start

できた。

6. postgresを起動する(最終行↑を実行)
$pg_ctl -D /usr/local/var/postgres start
pg_ctl: another server might be running; trying to start server anyway
waiting for server to start....2019-09-16 14:27:05.646 JST [47660] FATAL:  lock file "postmaster.pid" already exists
2019-09-16 14:27:05.646 JST [47660] HINT:  Is another postmaster (PID 47153) running in data directory "/usr/local/var/postgres"?
 stopped waiting
pg_ctl: could not start server
Examine the log output.

また怒られた。

しかし lock file "postmaster.pid" already exists に既視感。消せばよさそう!

7. pidをファイルを消す(3を再び)

postgres をちゃんと終了しないと.pidファイルが残っ... を参考にした。

$rm /usr/local/var/postgres/postmaster.pid
$launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgesql.plist

消してみた。

8. もう一度postgresを起動してみる(6を再び)
$pg_ctl -D /usr/local/var/postgres start
waiting for server to start....2019-09-16 14:28:53.989 JST [47751] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2019-09-16 14:28:53.989 JST [47751] LOG:  listening on IPv6 address "::1", port 5432
2019-09-16 14:28:53.990 JST [47751] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2019-09-16 14:28:54.001 JST [47752] LOG:  database system was shut down at 2019-09-16 14:28:49 JST
2019-09-16 14:28:54.005 JST [47751] LOG:  database system is ready to accept connections
 done
server started

いけたかも?

9. postgresの生存確認(1を再び)
$ps aux | grep postgres
you             47787   0.0  0.0  4277256    800 s000  S+    2:29PM   0:00.00 grep postgres
you             47758   0.0  0.0  4481240   1604   ??  Ss    2:28PM   0:00.00 postgres: logical replication launcher     
you             47757   0.0  0.0  4336108    804   ??  Ss    2:28PM   0:00.00 postgres: stats collector     
you             47756   0.0  0.0  4481240   1792   ??  Ss    2:28PM   0:00.00 postgres: autovacuum launcher     
you             47755   0.0  0.0  4472984   5100   ??  Ss    2:28PM   0:00.01 postgres: walwriter     
you             47754   0.0  0.0  4481176   1356   ??  Ss    2:28PM   0:00.01 postgres: background writer     
you             47753   0.0  0.0  4472984    924   ??  Ss    2:28PM   0:00.00 postgres: checkpointer     
you             47751   0.0  0.1  4481456  18300 s000  S     2:28PM   0:00.03 /usr/local/Cellar/postgresql/11.5_1/bin/postgres -D /usr/local/var/postgres

いけた!

10.ついにrails serverを立ち上げてみる
$rails s
I, [2019-09-16T14:32:25.292908 #47859]  INFO -- sentry: ** [Raven] Raven 2.7.1 configured not to capture errors: Not configured to send/capture in environment 'development'
=> Booting Puma
=> Rails 6.0.0 application starting in development 
=> Run `rails server --help` for more startup options
2019-09-16 14:32:27.822 JST [47878] FATAL:  database "database_name" does not exist
.
.
.
/Users/you/project/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb:50:in `rescue in postgresql_connection': FATAL:  database "database_name" does not exist (ActiveRecord::NoDatabaseError)

そんなdatabaseはないと言われた。

11. dbを作成する
$rails db:drop
I, [2019-09-16T14:33:13.326011 #47928]  INFO -- sentry: ** [Raven] Raven 2.7.1 configured not to capture errors: Not configured to send/capture in environment 'default'
2019-09-16 14:33:14.644 JST [47947] FATAL:  database "database_name" does not exist
Dropped database 'database_name'

$rails db:create
I, [2019-09-16T14:33:38.979597 #47986]  INFO -- sentry: ** [Raven] Raven 2.7.1 configured not to capture errors: Not configured to send/capture in environment 'default'
Created database 'database_name'
12. 再びrails serverを立ち上げる
$rails s
I, [2019-09-16T14:34:04.421763 #48044]  INFO -- sentry: ** [Raven] Raven 2.7.1 configured not to capture errors: Not configured to send/capture in environment 'development'
=> Booting Puma
=> Rails 6.0.0 application starting in development 
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 3.11.0 (ruby 2.6.4-p104), codename: Love Song
* Min threads: 4, max threads: 4
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop

いけた! :clap:

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