バージョン
- rails 5.1.4
- capistrano3-puma 3.1.1
- puma_worker_killer 0.1.0
動けばOK!という方はこちらで
lib/capistrano/templates/puma-production.rb
を作成し、以下の内容を記述してください。
#!/usr/bin/env puma
directory '<%= current_path %>'
rackup "<%=fetch(:puma_rackup)%>"
environment '<%= fetch(:puma_env) %>'
<% if fetch(:puma_tag) %>
tag '<%= fetch(:puma_tag)%>'
<% end %>
pidfile "<%=fetch(:puma_pid)%>"
state_path "<%=fetch(:puma_state)%>"
stdout_redirect '<%=fetch(:puma_access_log)%>', '<%=fetch(:puma_error_log)%>', true
threads <%=fetch(:puma_threads).join(',')%>
<%= puma_plugins %>
<%= puma_bind %>
<% if fetch(:puma_control_app) %>
activate_control_app "<%= fetch(:puma_default_control_app) %>"
<% end %>
workers <%= puma_workers %>
<% if fetch(:puma_worker_timeout) %>
worker_timeout <%= fetch(:puma_worker_timeout).to_i %>
<% end %>
<% if puma_daemonize? %>
daemonize
<% end %>
restart_command '<%= fetch(:puma_restart_command) %>'
<% if puma_preload_app? %>
preload_app!
<% else %>
prune_bundler
<% end %>
on_restart do
puts 'Refreshing Gemfile'
ENV["BUNDLE_GEMFILE"] = "<%= fetch(:bundle_gemfile, "
end
<% if puma_preload_app? and fetch(:puma_init_active_record) %>
before_fork do
ActiveRecord::Base.connection_pool.disconnect!
end
on_worker_boot do
ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.establish_connection
end
end
<% end %>
before_fork do
require 'puma_worker_killer'
PumaWorkerKiller.config do |config|
config.ram = 1024
config.frequency = 5
config.percent_usage = 0.98
config.rolling_restart_frequency = 6 * 3600
config.reaper_status_logs = true
config.pre_term = -> (worker) { puts "Worker #{worker.inspect} being killed" }
end
PumaWorkerKiller.start
end
bundle exec cap puma:config
を実行して設定ファイルをサーバーに設置します。
bundle exec cap puma:stop
と bundle exec cap puma:start
を実行すると設定が反映されます。
上記の設定ファイルがサーバーに出力される理由