AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

puma.sock failed (111: Connection refused) while connecting to upstream

Nginx で puma の unix socket を参照するように設定した所、 502 が連続するので「何事……?」となっていた。

integration という RAILS_ENV を増やしていたのが原因かと思っていたけど、単純なミスだった。

しらべる

Rails 側のログには何も記録されていないので、Nginx の error.log を確認する。

2022/08/22 22:59:28 [crit] 23808#23808: *66 connect() to unix:///var/www/example/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 169.254.169.254, server: *.example.com, request: "GET / HTTP/1.1", upstream: "http://unix:///var/www/example/tmp/sockets/puma.sock:/", host: "www.example.com"

upstream を http でアクセスしとるやんけ、なんやこいつ……。 と思ったが、よく見たら No such file or directory が出ている。

確認したところ、 /var/www/example/tmp/ までは存在するが、更に配下の /sockets/ が存在していなかった。

mkdir -p /var/www/example/tmp/sockets/

これで解決、と思ったら次はこう。

2022/08/22 23:03:33 [error] 23808#23808: *102 connect() to unix:///var/www/example/tmp/sockets/puma.sock failed (111: Connection refused) while connecting to upstream, client: 169.254.169.254, server: *.example.com, request: "GET / HTTP/1.1", upstream: "http://unix:///var/www/example/tmp/sockets/puma.sock:/", host: "www.example.com"

Connection refused ……? もうわかなんなくなってしまったので、 systemd から起動をやめて直接 puma を起動してみた。

/bin/bash -lc 'RAILS_ENV=integration bundle exec puma -C config/puma.integration.rb'
Puma starting in single mode...
* Puma version: 5.6.4 (ruby 3.1.0-p0) ("Birdie's Version")
*  Min threads: 5
*  Max threads: 5
*  Environment: integration
*          PID: 9447
* Listening on unix:///var/www/example/tmp/sockets/puma.sock
bundler: failed to load command: puma (/var/www/example/vendor/bundle/ruby/3.1.0/bin/puma)
/var/www/example/vendor/bundle/ruby/3.1.0/gems/puma-5.6.4/lib/puma/launcher.rb:248:in `write': No such file or directory @ rb_sysopen - tmp/pids/server.pid (Errno::ENOENT)

今度は tmp/pids/ が無いんけワレ!

mkdir -p /var/www/example/tmp/pids/

これで無事 puma が起動できたので、改めて systemd からも起動することを確認して、ブラウザ側からも閲覧できることを確認して終了。

利用していた IaC コードの実装に問題があって、コンテナ環境から素朴な Rails のウェブ三層アプリケーション環境に突貫で移行したけど、久しぶりすぎて結構忘れていた。