Skip to content

Commit

Permalink
Switch to Puma for Rack compatibility (#2744)
Browse files Browse the repository at this point in the history
We're now using Rack 3, since upgrading to Rails 8.0 in #2705. There's
an incompatiblity between Unicorn and Rack 3, which whilst it has a
commit to fix it, hasn't been released yet.

Unfortunately it wasn't possible to bundle Unicorn directly from the repo, and
building the gem locally didn't work despite a few attempts.

Instead, let's switch to Puma.

Fixes #2730.

https://stackoverflow.com/a/78594913
https://yhbt.net/unicorn.git/9d7bab0bc2211b20806d4d0289a7ea992e49a8a1/s/
  • Loading branch information
nickcharlton authored Jan 6, 2025
1 parent f88d3ae commit 8b0e79b
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 38 deletions.
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ gem "globalid"
gem "image_processing"
gem "kaminari-i18n"
gem "pg"
gem "puma"
gem "pundit"
gem "redcarpet"
gem "sentry-rails"
gem "sentry-ruby"
gem "unicorn"

gem "cssbundling-rails", "~> 1.4"
gem "jsbundling-rails", "~> 1.3"
Expand Down
9 changes: 3 additions & 6 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,6 @@ GEM
kaminari-i18n (0.5.0)
kaminari
rails
kgio (2.11.4)
language_server-protocol (3.17.0.3)
launchy (3.0.1)
addressable (~> 2.8)
Expand Down Expand Up @@ -232,6 +231,8 @@ GEM
date
stringio
public_suffix (6.0.1)
puma (6.5.0)
nio4r (~> 2.0)
pundit (2.4.0)
activesupport (>= 3.0.0)
racc (1.8.1)
Expand Down Expand Up @@ -276,7 +277,6 @@ GEM
thor (~> 1.0, >= 1.2.2)
zeitwerk (~> 2.6)
rainbow (3.1.1)
raindrops (0.20.1)
rake (13.2.1)
rdoc (6.10.0)
psych (>= 4.0.0)
Expand Down Expand Up @@ -367,9 +367,6 @@ GEM
uglifier (4.2.1)
execjs (>= 0.3.0, < 3)
unicode-display_width (2.6.0)
unicorn (6.1.0)
kgio (~> 2.6)
raindrops (~> 0.7)
uri (1.0.2)
useragent (0.16.11)
webmock (3.24.0)
Expand Down Expand Up @@ -411,6 +408,7 @@ DEPENDENCIES
kaminari-i18n
launchy
pg
puma
pundit
rack-timeout
redcarpet
Expand All @@ -422,7 +420,6 @@ DEPENDENCIES
standard
timecop
uglifier
unicorn
webmock
webrick
xpath (= 3.2.0)
Expand Down
2 changes: 1 addition & 1 deletion Procfile
Original file line number Diff line number Diff line change
@@ -1 +1 @@
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
web: bundle exec puma -C config/puma.rb
35 changes: 35 additions & 0 deletions config/puma.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# This configuration file will be evaluated by Puma. The top-level methods that
# are invoked here are part of Puma's configuration DSL. For more information
# about methods provided by the DSL, see https://puma.io/puma/Puma/DSL.html.

# Puma can serve each request in a thread from an internal thread pool.
# The `threads` method setting takes two numbers: a minimum and maximum.
# Any libraries that use thread pools should be configured to match
# the maximum value specified for Puma. Default is set to 5 threads for minimum
# and maximum; this matches the default thread size of Active Record.
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
threads min_threads_count, max_threads_count

# Specifies that the worker count should equal the number of processors in production.
if ENV["RAILS_ENV"] == "production"
require "concurrent-ruby"
worker_count = Integer(ENV.fetch("WEB_CONCURRENCY") { Concurrent.physical_processor_count })
workers worker_count if worker_count > 1
end

# Specifies the `worker_timeout` threshold that Puma will use to wait before
# terminating a worker in development environments.
worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"

# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
port ENV.fetch("PORT") { 3000 }

# Specifies the `environment` that Puma will run in.
environment ENV.fetch("RAILS_ENV") { "development" }

# Specifies the `pidfile` that Puma will use.
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }

# Allow puma to be restarted by `bin/rails restart` command.
plugin :tmp_restart
25 changes: 0 additions & 25 deletions config/unicorn.rb

This file was deleted.

2 changes: 1 addition & 1 deletion gemfiles/pundit21.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ gem "globalid"
gem "image_processing"
gem "kaminari-i18n"
gem "pg"
gem "puma"
gem "pundit", "~> 2.1.0"
gem "redcarpet"
gem "sentry-rails"
gem "sentry-ruby"
gem "unicorn"
gem "cssbundling-rails", "~> 1.4"
gem "jsbundling-rails", "~> 1.3"
gem "sprockets-rails", "~> 3.5"
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails60.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ gem "globalid"
gem "image_processing"
gem "kaminari-i18n"
gem "pg"
gem "puma"
gem "pundit"
gem "redcarpet"
gem "sentry-rails"
gem "sentry-ruby"
gem "unicorn"
gem "cssbundling-rails", "~> 1.4"
gem "jsbundling-rails", "~> 1.3"
gem "sprockets-rails", "~> 3.4"
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails61.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ gem "globalid"
gem "image_processing"
gem "kaminari-i18n"
gem "pg"
gem "puma"
gem "pundit"
gem "redcarpet"
gem "sentry-rails"
gem "sentry-ruby"
gem "unicorn"
gem "cssbundling-rails", "~> 1.4"
gem "jsbundling-rails", "~> 1.3"
gem "sprockets-rails", "~> 3.5"
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails70.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ gem "globalid"
gem "image_processing"
gem "kaminari-i18n"
gem "pg"
gem "puma"
gem "pundit"
gem "redcarpet"
gem "sentry-rails"
gem "sentry-ruby"
gem "unicorn"
gem "cssbundling-rails", "~> 1.4"
gem "jsbundling-rails", "~> 1.3"
gem "sprockets-rails", "~> 3.5"
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails80.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ gem "globalid"
gem "image_processing"
gem "kaminari-i18n"
gem "pg"
gem "puma"
gem "pundit"
gem "redcarpet"
gem "sentry-rails"
gem "sentry-ruby"
gem "unicorn"
gem "cssbundling-rails", "~> 1.4"
gem "jsbundling-rails", "~> 1.3"
gem "sprockets-rails", "~> 3.5"
Expand Down

0 comments on commit 8b0e79b

Please sign in to comment.