Copy Puma systemd unit template from capistrano3-puma
This commit copies the default puma.service.erb template from the capistrano3-puma gem into lib/capistrano/templates. This allows us to customize the generated systemd unit file during deploy. Note that we are also removing the `:puma_conf` variable from `config/deploy.rb`, as the new ExecStart line in the systemd template (based on capistrano3-puma 6.0.0) does not rely on a separate Puma config file. The command now directly invokes: ExecStart=<%= expanded_bundle_command %> exec puma -e <%= fetch(:puma_env) %> This replaces the older format used in 5.2.0: ExecStart=<%= expanded_bundle_command %> exec --keep-file-descriptors puma -C <%= fetch(:puma_conf) %> which required explicitly setting the Puma config path.
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
EnableDefaultLinters: false
|
EnableDefaultLinters: false
|
||||||
exclude:
|
exclude:
|
||||||
- '**/vendor/**/*'
|
- '**/vendor/**/*'
|
||||||
|
- 'lib/capistrano/templates/*'
|
||||||
linters:
|
linters:
|
||||||
AllowedScriptType:
|
AllowedScriptType:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ set :fnm_setup_command, -> do
|
|||||||
set :fnm_install_node_command, -> { "#{fetch(:fnm_setup_command)} && fnm use --install-if-missing" }
|
set :fnm_install_node_command, -> { "#{fetch(:fnm_setup_command)} && fnm use --install-if-missing" }
|
||||||
set :fnm_map_bins, %w[node npm rake yarn]
|
set :fnm_map_bins, %w[node npm rake yarn]
|
||||||
|
|
||||||
set :puma_conf, "#{release_path}/config/puma/#{fetch(:rails_env)}.rb"
|
|
||||||
set :puma_systemctl_user, :user
|
set :puma_systemctl_user, :user
|
||||||
set :puma_enable_socket_service, true
|
set :puma_enable_socket_service, true
|
||||||
set :puma_service_unit_env_vars, ["EXECJS_RUNTIME=Disabled"]
|
set :puma_service_unit_env_vars, ["EXECJS_RUNTIME=Disabled"]
|
||||||
|
|||||||
40
lib/capistrano/templates/puma.service.erb
Normal file
40
lib/capistrano/templates/puma.service.erb
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# This file tells systemd how to run Puma as a 24/7 long-running daemon.
|
||||||
|
#
|
||||||
|
# Customize this file based on your bundler location, app directory, etc.
|
||||||
|
# Customize and copy this into /usr/lib/systemd/system (CentOS) or /lib/systemd/system (Ubuntu).
|
||||||
|
# Then run:
|
||||||
|
# - systemctl enable <%= fetch(:puma_service_unit_name) %>
|
||||||
|
# - systemctl {start,stop,restart} <%= fetch(:puma_service_unit_name) %>
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Use `journalctl -u <%= fetch(:puma_service_unit_name) %> -rn 100` to view the last 100 lines of log output.
|
||||||
|
#
|
||||||
|
[Unit]
|
||||||
|
Description=Puma HTTP Server for <%= "#{fetch(:application)} (#{fetch(:stage)})" %>
|
||||||
|
<%= "Requires=#{fetch(:puma_service_unit_name)}.socket" if fetch(:puma_enable_socket_service) %>
|
||||||
|
After=syslog.target network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=<%= service_unit_type %>
|
||||||
|
WatchdogSec=10
|
||||||
|
<%="User=#{puma_user(@role)}" if fetch(:puma_systemctl_user) == :system %>
|
||||||
|
WorkingDirectory=<%= current_path %>
|
||||||
|
ExecStart=<%= expanded_bundle_command %> exec puma -e <%= fetch(:puma_env) %>
|
||||||
|
ExecReload=/bin/kill -USR1 $MAINPID
|
||||||
|
<%- Array(fetch(:puma_service_unit_env_files)).each do |file| %>
|
||||||
|
<%="EnvironmentFile=#{file}" -%>
|
||||||
|
<% end -%>
|
||||||
|
<% Array(fetch(:puma_service_unit_env_vars)).each do |environment_variable| %>
|
||||||
|
<%="Environment=\"#{environment_variable}\"" -%>
|
||||||
|
<% end -%>
|
||||||
|
|
||||||
|
# if we crash, restart
|
||||||
|
RestartSec=1
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
<%="StandardOutput=append:#{fetch(:puma_access_log)}" if fetch(:puma_access_log) %>
|
||||||
|
<%="StandardError=append:#{fetch(:puma_error_log)}" if fetch(:puma_error_log) %>
|
||||||
|
|
||||||
|
SyslogIdentifier=<%= fetch(:puma_service_unit_name) %>
|
||||||
|
[Install]
|
||||||
|
WantedBy=<%=(fetch(:puma_systemctl_user) == :system) ? "multi-user.target" : "default.target"%>
|
||||||
Reference in New Issue
Block a user