1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-03-25 01:14:43 +00:00

Upgraded to rails 8.0.2, moved from dalli to solid cache, moved from delayed_job to solid queue, and add solid cable. deploy/rails-dev-run.sh no longer needs to chmod. Fixed finished_at callback for matches. Migrated from Devise to built in rails auth. Added view tests for the bracket page testing that all bout numbers render for all matches in each bracket type.

This commit is contained in:
2025-04-08 17:54:42 -04:00
parent 9c25a6cc39
commit 2d433b680a
118 changed files with 4921 additions and 1341 deletions

View File

@@ -1,13 +1,17 @@
# 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 starts a configurable number of processes (workers) and each process
# serves each request in a thread from an internal thread pool.
#
# You can control the number of workers using ENV["WEB_CONCURRENCY"]. You
# should only set this value when you want to run 2 or more workers. The
# default is already 1.
#
# The ideal number of threads per worker depends both on how much time the
# application spends waiting for IO operations and on how much you wish to
# to prioritize throughput over latency.
# prioritize throughput over latency.
#
# As a rule of thumb, increasing the number of threads will increase how much
# traffic a given process can handle (throughput), but due to CRuby's
@@ -20,8 +24,56 @@
# Any libraries that use a connection pool or another resource pool should
# be configured to provide at least as many connections as the number of
# threads. This includes Active Record's `pool` parameter in `database.yml`.
threads_count = ENV.fetch("RAILS_MAX_THREADS", 3)
threads threads_count, threads_count
# Calculate available memory for Ruby process sizing (in MB)
available_memory_mb = if RUBY_PLATFORM =~ /darwin/
# Default to a reasonable amount on macOS where memory detection is difficult
8192 # 8GB default
else
begin
# Try to get memory from /proc/meminfo on Linux
mem_total_kb = `grep MemTotal /proc/meminfo`.to_s.strip.split(/\s+/)[1].to_i
mem_total_mb = mem_total_kb / 1024
# If we couldn't detect memory, use a safe default
mem_total_mb > 0 ? mem_total_mb : 4096
rescue
4096 # 4GB fallback if detection fails
end
end
# Calculate workers based on available CPUs and memory
# Each worker uses ~300-500MB of RAM, so we scale based on available memory
# If WEB_CONCURRENCY is set, use that value instead
cpu_count = begin
require 'etc'
Etc.nprocessors
rescue
2 # Default to 2 if we can't detect
end
# Default worker calculation:
# - With ample memory: Use CPU count
# - With limited memory: Use memory-based calculation with a min of 2 and max based on CPUs
# This automatically adapts to the environment
default_workers = if ENV["RAILS_ENV"] == "development"
1 # Use 1 worker in development for simplicity
else
# Calculate based on available memory, assuming ~400MB per worker
memory_based_workers = (available_memory_mb / 400).to_i
# Ensure at least 2 workers for production (for zero-downtime restarts)
# and cap at CPU count to avoid excessive context switching
[memory_based_workers, 2].max
end
default_workers = [default_workers, cpu_count].min
workers_count = ENV.fetch("WEB_CONCURRENCY") { default_workers }
# Configure thread count for optimal throughput
# More threads = better for IO-bound applications
# Fewer threads = better for CPU-bound applications
min_threads_count = ENV.fetch("RAILS_MIN_THREADS", 5)
max_threads_count = ENV.fetch("RAILS_MAX_THREADS", 12)
threads min_threads_count, max_threads_count
# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
port ENV.fetch("PORT", 3000)
@@ -29,6 +81,28 @@ port ENV.fetch("PORT", 3000)
# Allow puma to be restarted by `bin/rails restart` command.
plugin :tmp_restart
# Run the Solid Queue supervisor inside of Puma for single-server deployments
# Enable by default in development for convenience, can be disabled with SOLID_QUEUE_IN_PUMA=false
if (Rails.env.development? && ENV["SOLID_QUEUE_IN_PUMA"] != "false") || ENV["SOLID_QUEUE_IN_PUMA"] == "true"
plugin :solid_queue
end
# Specify the PID file. Defaults to tmp/pids/server.pid in development.
# In other environments, only set the PID file if requested.
pidfile ENV["PIDFILE"] if ENV["PIDFILE"]
# Set reasonable timeouts - these prevent hanging requests from consuming resources
worker_timeout 60
worker_boot_timeout 60
# Preload the application to reduce memory footprint in production
preload_app! if ENV["RAILS_ENV"] == "production"
# When using preload_app, ensure that connections are properly handled
on_worker_boot do
ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
end
# Log the configuration
puts "Puma starting with #{workers_count} worker(s), #{min_threads_count}-#{max_threads_count} threads per worker"
puts "Available system resources: #{cpu_count} CPU(s), #{available_memory_mb}MB RAM"