Next Generation Mina Puma
I refactor mina-puma( https://github.com/untitledkingdom/mina-puma ) because of the below:
- 
phased_restartandrestartneed start puma correctly when puma is down. - 
phased_restartandrestartshould confirm puma restart successfully. - Add 
smart_restartmode, it will first try to dophased_restart, when failed, usinghard_restartinstead. 
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
Installation
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
Usage
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
Example
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
endContributing
- 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