Report this

What is the reason for this report?

Rails Puma silently crashes without error

Posted on December 2, 2020

I have a Ruby on Rails application deployed in DigitalOcean ubuntu image.

My versions are:

ruby 2.6.0
rails 5.1.5.rc1
puma 4.3.6

I deploy my application using Capistrano

deploy.rb

# config valid for current version and patch releases of Capistrano
lock "~> 3.14.1"

set :application, "ricsonwin"
set :repo_url, "git@github.com:XXX/XXX.git"
set :deploy_user, "deploy"

set :pty, true
set :linked_files, %w{config/database.yml config/secrets.yml}
set :linked_dirs, %w{log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads}

set :keep_releases, 5
set :rvm_ruby_version, '2.6.0' # Edit this depends on the rvm ruby version installed in the server
set :bundle_binstubs, nil

set :puma_role, :app
set :puma_threads, [0, 8]
set :puma_workers, 0
set :puma_worker_timeout, nil
set :puma_init_active_record, true
set :puma_preload_app, false

# Creates database
before 'deploy:migrate', 'deploy:db:create'

after 'deploy:symlink:release', 'puma:config'

namespace :puma do
  Rake::Task[:restart].clear_actions

  desc "Overwritten puma:restart task"
  task :restart do
    puts "Overwriting puma:restart to ensure that puma is running. Effectively, we are just starting Puma."
    puts "A solution to this should be found."
    invoke 'puma:stop'
    invoke 'puma:start'
  end
end

deploy/production.log

server 'XXX.XXX.XXX.XXX', user: 'deploy', roles: %w{web app db}, primary: true

set :location, 'XXX.XXX.XXX.XXX'
role :db, fetch(:location), primary: true
set :branch, :master

set :full_app_name, "#{fetch(:application)}_#{fetch(:stage)}"
set :deploy_to, "/srv/www/apps/#{fetch(:full_app_name)}"

set :stage, :production
set :rails_env, :production
set :console_env, :production
set :environment, :production

set :rvm_type, :user

set :puma_env, fetch(:rack_env, fetch(:rails_env, 'production'))
set :puma_rackup, -> { File.join(current_path, 'config.ru') }
set :puma_state, "#{shared_path}/tmp/pids/puma.state"
set :puma_pid, "#{shared_path}/tmp/pids/puma.pid"
set :puma_bind, ["tcp://0.0.0.0:9292"]
set :puma_conf, "#{shared_path}/puma.rb"
set :puma_access_log, "#{shared_path}/log/puma_error.log"
set :puma_error_log, "#{shared_path}/log/puma_access.log"

config/puma.rb

if Rails.env.production?
  
  directory = "/srv/www/apps/myapp_production/current"
  rackup "/srv/www/apps/myapp_production/current/config.ru"
  environment Rails.env

  pidfile "/srv/www/apps/myapp_production/shared/tmp/pids/puma.pid"
  state_path "/srv/www/apps/myapp_production/shared/tmp/pids/puma.state"
  stdout_redirect "/srv/www/apps/myapp_production/shared/log/puma_access.log", "/srv/www/apps/myapp_production/shared/log/puma_error.log", true

  threads 4, 16
  workers 1

  bind "unix:///srv/www/apps/myapp_production/shared/tmp/sockets/puma.sock"

  preload_app!

  on_worker_boot do
    ActiveSupport.on_load(:active_record) do
    ActiveRecord::Base.establish_connection
    end
  end

else
  workers Integer(ENV['WEB_CONCURRENCY'] || 2)
  threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
  threads threads_count, threads_count

  preload_app!

  rackup      DefaultRackup
  port        ENV['PORT']     || 3000
  environment ENV['RACK_ENV'] || 'development'

  on_worker_boot do
    # Worker specific setup for Rails 4.1+
    # See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
    ActiveRecord::Base.establish_connection
  end
end

When I check the logs production.log

Item Load (0.3ms)  SELECT  "items".* FROM "items" WHERE "items"."id" = $1 LIMIT $2  [["id", 208], ["LIMIT", 1]]
  CACHE Unit Load (0.0ms)  SELECT  "units".* FROM "units" WHERE "units"."id" = $1 LIMIT $2  [["id", 4], ["LIMIT", 1]]
  Item Load (0.3ms)  SELECT  "items".* FROM "items" WHERE "items"."id" = $1 LIMIT $2  [["id", 215], ["LIMIT", 1]]
  CACHE Unit Load (0.0ms)  SELECT  "units".* FROM "units" WHERE "units"."id" = $1 LIMIT $2  [["id", 4], ["LIMIT", 1]]
  Item Load (0.2ms)  SELECT  "items".* FROM "items" WHERE "items"."id" = $1 LIMIT $2  [["id", 198], ["LIMIT", 1]]
  CACHE Unit Load (0.0ms)  SELECT  "units".* FROM "units" WHERE "units"."id" = $1 LIMIT $2  [["id", 10], ["LIMIT", 1]]
  Rendering text template
  Rendered text template (0.0ms)
Sent data Delivery Receipt 12-2020-001.pdf (0.5ms)
Completed 200 OK in 4326ms (Views: 0.3ms | ActiveRecord: 37.4ms)

puma_access.log

=== puma startup: 2020-12-01 01:07:13 +0000 ===

puma_error.log

Puma starting in single mode...
* Version 4.3.1 (ruby 2.6.0-p0), codename: Mysterious Traveller
* Min threads: 0, max threads: 8
* Environment: production
* Daemonizing...
=== puma startup: 2020-09-21 05:16:28 +0000 ===
=== puma startup: 2020-09-21 05:17:39 +0000 ===
* Listening on tcp://0.0.0.0:9292
=== puma startup: 2020-09-21 06:11:35 +0000 ===
- Gracefully stopping, waiting for requests to finish
=== puma shutdown: 2020-09-21 06:11:35 +0000 ===

My application is running but after a while it will stop, I’m not sure what’s causing the error.



This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

This option :puma_init_active_record does that, remove it and try again

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.