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 のウェブ三層アプリケーション環境に突貫で移行したけど、久しぶりすぎて結構忘れていた。