Skip to content

Commit

Permalink
Switch to Puma for Rack compatibility
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 committed Jan 6, 2025
1 parent f88d3ae commit 6bc2c9c
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 6bc2c9c

Please sign in to comment.