I refactor mina-puma( https://github.com/untitledkingdom/mina-puma ) because of the below:
phased_restart
andrestart
need start puma correctly when puma is down.phased_restart
andrestart
should confirm puma restart successfully.- Add
smart_restart
mode, it will first try to dophased_restart
, when failed, usinghard_restart
instead.
Mina tasks for handle with Puma.
This gem provides several mina tasks:
mina puma:smart_restart # Restart puma ( phased_restart then hard_restart )
mina puma:phased_restart # Restart puma (using phased restart)
mina puma:hard_restart # Restart puma (using stop, then start)
mina puma:restart # Restart puma (using pumactl)
mina puma:start # Start puma
mina puma:stop # Stop puma
mina puma:status # Get status
Add this line to your Rails application's Gemfile:
gem 'mina-ng-puma', require: false
And then execute:
$ bundle
Note: You should remove mina-puma
gem to ignore namespace conflict if you have install it before.
$ gem uninstall mina-puma
Run:
mina init
to generate config/deploy.rb
file if you have not configured it yet.
Add this to your config/deploy.rb
file:
require 'mina/puma'
Make sure the following settings are set in your config/deploy.rb
:
deploy_to
- deployment path
Make sure the following directories exists on your server:
shared/tmp/sockets
- directory for socket files.shared/tmp/pids
- directory for pid files.
OR you can set other directories by setting follow variables:
puma_socket
- puma socket file, default isshared/tmp/sockets/puma.sock
puma_pid
- puma pid file, defaultshared/tmp/pids/puma.pid
puma_state
- puma state file, defaultshared/tmp/sockets/puma.state
puma_stdout
- puma redirect path for stdout, defaultshared/log/puma.log
puma_stderr
- puma redirect path for stderr, defaultshared/log/puma.log
pumactl_socket
- pumactl socket file, defaultshared/tmp/sockets/pumactl.sock
puma_root_path
- puma command execute root path, defaultcurrent
Then:
$ bundle exec mina puma:start
require 'mina/puma'
# Add pids and sockets directories to shared dirs
set :shared_dirs, fetch(:shared_dirs, []).push('log', 'tmp/pids', 'tmp/sockets')
task :deploy do
deploy do
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
...
on :launch do
...
invoke :'puma:smart_restart'
end
end
end
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request