By allenchun
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
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Scale up as you grow — whether you're running one virtual machine or ten thousand.

From GPU-powered inference and Kubernetes to managed databases and storage, get everything you need to build, scale, and deploy intelligent applications.
