Gemfileにcapistrano3-pumaを追加してbundle install。
gem 'capistrano3-puma' , group: :development
puma関連のtaskが使えるようにcapistrano3-pumaライブラリを読み込む。
以下を追加。
require 'capistrano/puma'
install_plugin Capistrano::Puma # Default puma tasks
cap deploy
時にpumaがrestartされるように設定を追加。
config/deploy.rb
namespace :deploy do
task :restart_puma do
invoke 'puma:stop'
invoke! 'puma:start'
end
end
after 'deploy:finishing', 'deploy:restart_puma'
追加。
config/deploy/production.rb
set :puma_init_active_record, true
set :puma_bind, 'unix:///deploy/my_app/shared/tmp/sockets/puma.sock'
set :puma_daemonize, true
本番用puma設定ファイルの出力
$ bundle exec cap production puma:config
// config/deploy/production.rbの内容を加味して設定ファイルが作られる。
00:00 puma:config
Uploading /deploy/my_app/shared/puma.rb 100.0%
bundle exec cap production deploy
でいつもどおりデプロイ・再起動できる。
ほぼデフォルトの設定で出力したpuma.rbの内容。
/deploy/my_app/share/puma.rb
#!/usr/bin/env puma
directory '/deploy/my_app/current'
rackup "/deploy/my_app/current/config.ru"
environment 'production'
tag ''
pidfile "/deploy/my_app/shared/tmp/pids/puma.pid"
state_path "/deploy/my_app/shared/tmp/pids/puma.state"
stdout_redirect '/deploy/my_app/shared/log/puma_access.log', '/deploy/my_app/shared/log/puma_error.log', true
threads 0,16
bind 'unix:///deploy/my_app/shared/tmp/sockets/puma.sock'
workers 0
daemonize
restart_command 'bundle exec puma'
prune_bundler
on_restart do
puts 'Refreshing Gemfile'
ENV["BUNDLE_GEMFILE"] = ""
end
workers 0
なので シングルモードでの起動。
アクセス少ないサイトなのでこれで十分。
メモリ1GのサーバなのでPassengerのときは残りメモリが200MBを切っていたが、
250MB程度になった。
Railsでforce_ssl
していたがNginxでリバースプロキシするようになったので
リダイレクトループが起きてしまった。常時SSLはNginxの設定で実現するように移行。