From 78844572570befd2eaacccfcda9961d59ef9c63c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20V=C3=A1squez?= Date: Wed, 24 Jun 2026 18:32:50 -0600 Subject: [PATCH 1/2] Bump puma from 6.6.1 to 8.0.2 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 876ce5f..8a4b221 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -329,7 +329,7 @@ GEM date stringio public_suffix (6.0.1) - puma (6.6.1) + puma (8.0.2) nio4r (~> 2.0) raabro (1.4.0) racc (1.8.1) From 51c8cb7519ae3650a511b05629f18fab6a736ff0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20V=C3=A1squez?= Date: Wed, 24 Jun 2026 18:39:12 -0600 Subject: [PATCH 2/2] Pin Puma bind to IPv4 (0.0.0.0) Puma 8 changed the default bind to IPv6 (::) when an IPv6 interface is available. Heroku's router connects over IPv4, so an IPv6-only bind would cause an H20 boot timeout. Pin 0.0.0.0 to keep the bind deterministic. --- config/puma.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/config/puma.rb b/config/puma.rb index a248513..ba628c1 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -28,7 +28,10 @@ threads threads_count, threads_count # Specifies the `port` that Puma will listen on to receive requests; default is 3000. -port ENV.fetch("PORT", 3000) +# Bind explicitly to IPv4. Puma 8 changed the default bind to IPv6 (`::`) when an +# IPv6 interface is available; Heroku's router connects over IPv4, so an IPv6-only +# bind would cause an H20 boot timeout. Pinning 0.0.0.0 keeps it deterministic. +port ENV.fetch("PORT", 3000), "0.0.0.0" # Allow puma to be restarted by `bin/rails restart` command. plugin :tmp_restart