
Security News
Researcher Exposes Zero-Day Clickjacking Vulnerabilities in Major Password Managers
Hacker Demonstrates How Easy It Is To Steal Data From Popular Password Managers
Puma integration for Capistrano - providing systemd service management and zero-downtime deployments for Puma 5.1+.
For a complete working example of this gem in action, see the capistrano-example-app which demonstrates:
Add this line to your application's Gemfile:
gem 'capistrano3-puma', github: "seuros/capistrano-puma"
or:
gem 'capistrano3-puma' , group: :development
And then execute:
$ bundle
Version 6.0 includes several breaking changes:
Manual Puma Configuration: The gem no longer generates puma.rb
automatically
config/puma.rb
in your repositorylinked_files
in your deploy.rb
Default puma_bind Removed: You must explicitly set the bind address
set :puma_bind, "unix://#{shared_path}/tmp/sockets/puma.sock"
Systemd Service Changes: Services are now user-specific by default
~/.config/systemd/user/
cap production puma:install
again after upgradingconfig/puma.rb
if you don't have onedeploy.rb
:
append :linked_files, 'config/puma.rb'
set :puma_bind, "unix://#{shared_path}/tmp/sockets/puma.sock"
cap production puma:install
to update the systemd service # Capfile
require 'capistrano/puma'
install_plugin Capistrano::Puma # Default puma tasks
install_plugin Capistrano::Puma::Systemd
To prevent loading the hooks of the plugin, add false to the load_hooks param.
# Capfile
install_plugin Capistrano::Puma, load_hooks: false # Default puma tasks without hooks
To make it work with rvm, rbenv and chruby, install the plugin after corresponding library inclusion.
# Capfile
require 'capistrano/rbenv'
require 'capistrano/puma'
install_plugin Capistrano::Puma
Puma configuration is expected to be in config/puma.rb
or config/puma/#{fetch(:puma_env)}.rb
and checked in your repository.
Starting with version 6.0.0, you need to manage the puma configuration file yourself. Here are the steps:
shared/config/puma.rb
on the serverdeploy.rb
:
append :linked_files, 'config/puma.rb'
This ensures the puma configuration persists across deployments. The systemd service will start puma with puma -e <environment>
from your app's current directory.
π Hey there, human! Read this magical section and save yourself from confusion! π
Before your first deployment, you MUST install the Puma systemd service on your server:
# β¨ This only needs to be done once per server/stage - it's like a first date! π
$ bundle exec cap production puma:install
This command will:
π Plot twist: Without running this command first, your deployment will succeed but Puma won't start! (We know, it's sneaky like that π )
After the initial setup, normal deployments will work as expected:
$ bundle exec cap production deploy
The deployment process will automatically restart Puma using the installed systemd service.
To manually control the Puma service:
$ bundle exec cap production puma:start
$ bundle exec cap production puma:stop
$ bundle exec cap production puma:restart
To uninstall the systemd service:
$ bundle exec cap production puma:uninstall
$ cap -T puma
cap puma:disable # Disable Puma systemd service
cap puma:enable # Enable Puma systemd service
cap puma:install # Install Puma systemd service
cap puma:reload # Reload Puma service via systemd
cap puma:restart # Restart Puma service via systemd
cap puma:restart_socket # Restart Puma socket via systemd
cap puma:smart_restart # Restarts or reloads Puma service via systemd
cap puma:start # Start Puma service via systemd
cap puma:status # Get Puma service status via systemd
cap puma:stop # Stop Puma service via systemd
cap puma:stop_socket # Stop Puma socket via systemd
cap puma:uninstall # Uninstall Puma systemd service
A sample application is provided to show how to use this gem at https://github.com/seuros/capistrano-example-app
Systemd socket activation starts your app upon first request if it is not already running
set :puma_enable_socket_service, true
For more information on socket activation have a look at the systemd.socket
man page.
To restart the listening socket using Systemd run
cap puma:systemd:restart_socket
This would also restart the puma instance as the puma service depends on the socket service being active
Configurable options, shown here with defaults: Please note the configuration options below are not required unless you are trying to override a default setting, for instance if you are deploying on a host on which you do not have sudo or root privileges and you need to restrict the path. These settings go in the deploy.rb file.
set :puma_user, fetch(:user)
set :puma_role, :web
set :puma_bind, "unix://#{shared_path}/tmp/sockets/puma.sock"
set :puma_systemd_watchdog_sec, 10 # Set to 0 or false to disable watchdog
set :puma_service_unit_env_files, []
set :puma_service_unit_env_vars, []
Notes: If you are setting values for variables that might be used by other plugins, use append
instead of set
. For example:
append :rbenv_map_bins, 'puma', 'pumactl'
cap production puma:install
before your first deploymentcap production puma:status
sudo journalctl -u your_app_puma_production -n 100
This usually means nginx and puma have mismatched configurations:
puma_bind
in deploy.rb matches your nginx upstream configuration# Unix socket (default)
set :puma_bind, "unix://#{shared_path}/tmp/sockets/puma.sock"
# TCP port
set :puma_bind, "tcp://0.0.0.0:3000"
set :puma_systemd_watchdog_sec, 30 # 30 seconds
# or
set :puma_systemd_watchdog_sec, 0 # Disable watchdog
Nginx documentation was moved to nginx.md
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)FAQs
Unknown package
We found that capistrano3-puma demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Hacker Demonstrates How Easy It Is To Steal Data From Popular Password Managers
Security News
Oxlintβs new preview brings type-aware linting powered by typescript-go, combining advanced TypeScript rules with native-speed performance.
Security News
A new site reviews software projects to reveal if theyβre truly FOSS, making complex licensing and distribution models easy to understand.