capistrano3-puma 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/CONTRIBUTORS.md +14 -5
- data/LICENSE.txt +1 -1
- data/README.md +5 -4
- data/capistrano3-puma.gemspec +6 -2
- data/lib/capistrano/puma.rb +117 -1
- data/lib/capistrano/puma/jungle.rb +30 -2
- data/lib/capistrano/puma/monit.rb +30 -2
- data/lib/capistrano/puma/nginx.rb +20 -1
- data/lib/capistrano/puma/version.rb +1 -3
- data/lib/capistrano/puma/workers.rb +7 -2
- data/lib/capistrano/tasks/jungle.rake +4 -29
- data/lib/capistrano/tasks/monit.rake +2 -23
- data/lib/capistrano/tasks/nginx.rake +4 -15
- data/lib/capistrano/tasks/puma.rake +9 -111
- data/lib/capistrano/tasks/workers.rake +13 -11
- data/lib/capistrano/templates/puma.rb.erb +4 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4dc9950a23bafe870cddd6646561016a410f1d4
|
4
|
+
data.tar.gz: 42ce480b729df2bc98880303cc709cd137963f78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: daa0d11b90a4c1a9707d5c6d9b3435592bb383a8ea35cb8d4f4ca9a82b775c241533b0570a48599fe5d1fc39b053a1f6474b22ff494fc0f0abad78ee333eb193
|
7
|
+
data.tar.gz: 4f8f739a71eab448a9a778d2f9fdceeecf28f4b4cdd96efebfaaef64f95f266aa7c3a00ddd20da9988a89098d7afcff104749382d1b48768b1a07e862a0a8b10
|
data/CHANGELOG.md
CHANGED
data/CONTRIBUTORS.md
CHANGED
@@ -3,12 +3,14 @@
|
|
3
3
|
Abdelkader Boudih
|
4
4
|
André Arko
|
5
5
|
Ariel Zerahia
|
6
|
-
|
6
|
+
Barack Obama
|
7
|
+
Bart de Water
|
8
|
+
Benjamin Kim
|
7
9
|
Bin Huang
|
8
10
|
Bryan Liles
|
9
11
|
Claudio Poli
|
10
12
|
Cyril Rohr
|
11
|
-
|
13
|
+
Eric
|
12
14
|
Fritz Lee
|
13
15
|
Hnat Kubov
|
14
16
|
Ivan Schneider
|
@@ -25,21 +27,28 @@ Konstantin Papkovskiy
|
|
25
27
|
Kyle Decot
|
26
28
|
Lisa Hagemann
|
27
29
|
Lonre Wang
|
28
|
-
|
30
|
+
Lucas Alves
|
31
|
+
Marcos Chicote
|
29
32
|
Matias De Santi
|
30
33
|
Michael C. Beck
|
31
34
|
Molfar
|
32
|
-
msbrigna
|
33
35
|
Neil Bartley
|
34
36
|
Peter
|
37
|
+
Philippe Nénert
|
35
38
|
Ponomarev Nikolay
|
36
39
|
Rafael Goulart
|
37
40
|
RavWar
|
38
|
-
ruohan.chen
|
39
41
|
Ruslan
|
42
|
+
SHIMADA Koji
|
40
43
|
Sergey Ponomarev
|
41
44
|
Shane O'Grady
|
42
45
|
Simon Males
|
43
46
|
Steve Madere
|
44
47
|
Suhail Patel
|
45
48
|
Suraj Shirvankar
|
49
|
+
ayaya
|
50
|
+
dfang
|
51
|
+
marshall-lee
|
52
|
+
mizukmb
|
53
|
+
msbrigna
|
54
|
+
ruohan.chen
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -20,10 +20,10 @@ And then execute:
|
|
20
20
|
# Capfile
|
21
21
|
|
22
22
|
require 'capistrano/puma'
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
install_plugin Capistrano::Puma::Workers # if you want to control the workers (in cluster mode)
|
24
|
+
install_plugin Capistrano::Puma::Jungle # if you need the jungle tasks
|
25
|
+
install_plugin Capistrano::Puma::Monit # if you need the monit tasks
|
26
|
+
install_plugin Capistrano::Puma::Nginx # if you want to upload a nginx site template
|
27
27
|
```
|
28
28
|
|
29
29
|
### Config
|
@@ -113,6 +113,7 @@ Configurable options, shown here with defaults: Please note the configuration op
|
|
113
113
|
set :puma_worker_timeout, nil
|
114
114
|
set :puma_init_active_record, false
|
115
115
|
set :puma_preload_app, false
|
116
|
+
set :puma_daemonize, true
|
116
117
|
set :puma_plugins, [] #accept array of plugins
|
117
118
|
set :nginx_use_ssl, false
|
118
119
|
```
|
data/capistrano3-puma.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'capistrano/puma/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'capistrano3-puma'
|
8
|
-
spec.version = Capistrano::
|
8
|
+
spec.version = Capistrano::PumaVERSION
|
9
9
|
spec.authors = ['Abdelkader Boudih']
|
10
10
|
spec.email = ['Terminale@gmail.com']
|
11
11
|
spec.description = %q{Puma integration for Capistrano 3}
|
@@ -18,7 +18,11 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.files = `git ls-files`.split($/)
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'capistrano', '~> 3.
|
21
|
+
spec.add_dependency 'capistrano', '~> 3.7'
|
22
22
|
spec.add_dependency 'capistrano-bundler'
|
23
23
|
spec.add_dependency 'puma' , '~> 3.4'
|
24
|
+
spec.post_install_message = %q{
|
25
|
+
[capistrano-puma] Plugins need to be explicitly installed with install_plugin.
|
26
|
+
Please see README.md
|
27
|
+
}
|
24
28
|
end
|
data/lib/capistrano/puma.rb
CHANGED
@@ -1,2 +1,118 @@
|
|
1
1
|
require 'capistrano/bundler'
|
2
|
-
|
2
|
+
require "capistrano/plugin"
|
3
|
+
|
4
|
+
module Capistrano
|
5
|
+
module PumaCommon
|
6
|
+
def puma_switch_user(role, &block)
|
7
|
+
user = puma_user(role)
|
8
|
+
if user == role.user
|
9
|
+
block.call
|
10
|
+
else
|
11
|
+
as user do
|
12
|
+
block.call
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def puma_user(role)
|
18
|
+
properties = role.properties
|
19
|
+
properties.fetch(:puma_user) || # local property for puma only
|
20
|
+
fetch(:puma_user) ||
|
21
|
+
properties.fetch(:run_as) || # global property across multiple capistrano gems
|
22
|
+
role.user
|
23
|
+
end
|
24
|
+
|
25
|
+
def puma_bind
|
26
|
+
Array(fetch(:puma_bind)).collect do |bind|
|
27
|
+
"bind '#{bind}'"
|
28
|
+
end.join("\n")
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def template_puma(from, to, role)
|
33
|
+
file = [
|
34
|
+
"lib/capistrano/templates/#{from}-#{role.hostname}-#{fetch(:stage)}.rb",
|
35
|
+
"lib/capistrano/templates/#{from}-#{role.hostname}.rb",
|
36
|
+
"lib/capistrano/templates/#{from}-#{fetch(:stage)}.rb",
|
37
|
+
"lib/capistrano/templates/#{from}.rb.erb",
|
38
|
+
"lib/capistrano/templates/#{from}.rb",
|
39
|
+
"lib/capistrano/templates/#{from}.erb",
|
40
|
+
"config/deploy/templates/#{from}.rb.erb",
|
41
|
+
"config/deploy/templates/#{from}.rb",
|
42
|
+
"config/deploy/templates/#{from}.erb",
|
43
|
+
File.expand_path("../templates/#{from}.erb", __FILE__),
|
44
|
+
].detect { |path| File.file?(path) }
|
45
|
+
erb = File.read(file)
|
46
|
+
backend.upload! StringIO.new(ERB.new(erb, nil, '-').result(binding)), to
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class Puma < Capistrano::Plugin
|
51
|
+
include PumaCommon
|
52
|
+
|
53
|
+
def define_tasks
|
54
|
+
eval_rakefile File.expand_path('../tasks/puma.rake', __FILE__)
|
55
|
+
end
|
56
|
+
|
57
|
+
def set_defaults
|
58
|
+
set_if_empty :puma_role, :app
|
59
|
+
set_if_empty :puma_env, -> { fetch(:rack_env, fetch(:rails_env, fetch(:stage))) }
|
60
|
+
# Configure "min" to be the minimum number of threads to use to answer
|
61
|
+
# requests and "max" the maximum.
|
62
|
+
set_if_empty :puma_threads, [0, 16]
|
63
|
+
set_if_empty :puma_workers, 0
|
64
|
+
set_if_empty :puma_rackup, -> { File.join(current_path, 'config.ru') }
|
65
|
+
set_if_empty :puma_state, -> { File.join(shared_path, 'tmp', 'pids', 'puma.state') }
|
66
|
+
set_if_empty :puma_pid, -> { File.join(shared_path, 'tmp', 'pids', 'puma.pid') }
|
67
|
+
set_if_empty :puma_bind, -> { File.join("unix://#{shared_path}", 'tmp', 'sockets', 'puma.sock') }
|
68
|
+
set_if_empty :puma_default_control_app, -> { File.join("unix://#{shared_path}", 'tmp', 'sockets', 'pumactl.sock') }
|
69
|
+
set_if_empty :puma_conf, -> { File.join(shared_path, 'puma.rb') }
|
70
|
+
set_if_empty :puma_access_log, -> { File.join(shared_path, 'log', 'puma_access.log') }
|
71
|
+
set_if_empty :puma_error_log, -> { File.join(shared_path, 'log', 'puma_error.log') }
|
72
|
+
set_if_empty :puma_init_active_record, false
|
73
|
+
set_if_empty :puma_preload_app, false
|
74
|
+
set_if_empty :puma_daemonize, false
|
75
|
+
|
76
|
+
# Chruby, Rbenv and RVM integration
|
77
|
+
append :chruby_map_bins, 'puma', 'pumactl'
|
78
|
+
append :rbenv_map_bins, 'puma', 'pumactl'
|
79
|
+
append :rvm_map_bins, 'puma', 'pumactl'
|
80
|
+
|
81
|
+
# Bundler integration
|
82
|
+
append :bundle_bins, 'puma', 'pumactl'
|
83
|
+
end
|
84
|
+
|
85
|
+
def register_hooks
|
86
|
+
after 'deploy:check', 'puma:check'
|
87
|
+
after 'deploy:finished', 'puma:smart_restart'
|
88
|
+
end
|
89
|
+
|
90
|
+
def puma_workers
|
91
|
+
fetch(:puma_workers, 0)
|
92
|
+
end
|
93
|
+
|
94
|
+
def puma_preload_app?
|
95
|
+
fetch(:puma_preload_app)
|
96
|
+
end
|
97
|
+
|
98
|
+
def puma_daemonize?
|
99
|
+
fetch(:puma_daemonize)
|
100
|
+
end
|
101
|
+
|
102
|
+
def puma_plugins
|
103
|
+
Array(fetch(:puma_plugins)).collect do |bind|
|
104
|
+
"plugin '#{bind}'"
|
105
|
+
end.join("\n")
|
106
|
+
end
|
107
|
+
|
108
|
+
def upload_puma_rb(role)
|
109
|
+
template_puma 'puma.rb', fetch(:puma_conf), role
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
install_plugin Capistrano::Puma
|
114
|
+
|
115
|
+
require 'capistrano/puma/workers'
|
116
|
+
require 'capistrano/puma/monit'
|
117
|
+
require 'capistrano/puma/jungle'
|
118
|
+
require 'capistrano/puma/nginx'
|
@@ -1,2 +1,30 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Capistrano
|
2
|
+
class Puma::Jungle < Capistrano::Plugin
|
3
|
+
include PumaCommon
|
4
|
+
|
5
|
+
def set_defaults
|
6
|
+
set_if_empty :puma_jungle_conf, '/etc/puma.conf'
|
7
|
+
set_if_empty :puma_run_path, '/usr/local/bin/run-puma'
|
8
|
+
end
|
9
|
+
|
10
|
+
def define_tasks
|
11
|
+
eval_rakefile File.expand_path('../../tasks/jungle.rake', __FILE__)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def debian_install
|
17
|
+
template_puma 'puma-deb', "#{fetch(:tmp_dir)}/puma", @role
|
18
|
+
execute "chmod +x #{fetch(:tmp_dir)}/puma"
|
19
|
+
sudo "mv #{fetch(:tmp_dir)}/puma /etc/init.d/puma"
|
20
|
+
sudo 'update-rc.d -f puma defaults'
|
21
|
+
end
|
22
|
+
|
23
|
+
def rhel_install
|
24
|
+
template_puma 'puma-rpm', "#{fetch(:tmp_dir)}/puma", @role
|
25
|
+
execute "chmod +x #{fetch(:tmp_dir)}/puma"
|
26
|
+
sudo "mv #{fetch(:tmp_dir)}/puma /etc/init.d/puma"
|
27
|
+
sudo 'chkconfig --add puma'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,2 +1,30 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Capistrano
|
2
|
+
class Puma::Monit < Capistrano::Plugin
|
3
|
+
def register_hooks
|
4
|
+
before 'deploy:updating', 'puma:monit:unmonitor'
|
5
|
+
after 'deploy:published', 'puma:monit:monitor'
|
6
|
+
end
|
7
|
+
|
8
|
+
def define_tasks
|
9
|
+
eval_rakefile File.expand_path('../../tasks/monit.rake', __FILE__)
|
10
|
+
end
|
11
|
+
|
12
|
+
def set_defaults
|
13
|
+
set_if_empty :puma_monit_conf_dir, -> { "/etc/monit/conf.d/#{puma_monit_service_name}.conf" }
|
14
|
+
set_if_empty :puma_monit_use_sudo, true
|
15
|
+
set_if_empty :puma_monit_bin, '/usr/bin/monit'
|
16
|
+
end
|
17
|
+
|
18
|
+
def puma_monit_service_name
|
19
|
+
fetch(:puma_monit_service_name, "puma_#{fetch(:application)}_#{fetch(:stage)}")
|
20
|
+
end
|
21
|
+
|
22
|
+
def sudo_if_needed(command)
|
23
|
+
if fetch(:puma_monit_use_sudo)
|
24
|
+
sudo command
|
25
|
+
else
|
26
|
+
execute command
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1 +1,20 @@
|
|
1
|
-
|
1
|
+
module Capistrano
|
2
|
+
class Puma::Nginx < Capistrano::Plugin
|
3
|
+
include PumaCommon
|
4
|
+
def set_defaults
|
5
|
+
# Nginx and puma configuration
|
6
|
+
set_if_empty :nginx_config_name, "#{fetch(:application)}_#{fetch(:stage)}"
|
7
|
+
set_if_empty :nginx_sites_available_path, '/etc/nginx/sites-available'
|
8
|
+
set_if_empty :nginx_sites_enabled_path, '/etc/nginx/sites-enabled'
|
9
|
+
set_if_empty :nginx_server_name, "localhost #{fetch(:application)}.local"
|
10
|
+
set_if_empty :nginx_flags, 'fail_timeout=0'
|
11
|
+
set_if_empty :nginx_http_flags, fetch(:nginx_flags)
|
12
|
+
set_if_empty :nginx_socket_flags, fetch(:nginx_flags)
|
13
|
+
set_if_empty :nginx_use_ssl, false
|
14
|
+
end
|
15
|
+
|
16
|
+
def define_tasks
|
17
|
+
eval_rakefile File.expand_path('../../tasks/nginx.rake', __FILE__)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,27 +1,20 @@
|
|
1
|
-
|
2
|
-
task :defaults do
|
3
|
-
set :puma_jungle_conf, '/etc/puma.conf'
|
4
|
-
set :puma_run_path, '/usr/local/bin/run-puma'
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
1
|
+
git_plugin = self
|
8
2
|
|
9
3
|
namespace :puma do
|
10
4
|
namespace :jungle do
|
11
|
-
|
12
5
|
desc 'Install Puma jungle'
|
13
6
|
task :install do
|
14
7
|
on roles(fetch(:puma_role)) do |role|
|
15
8
|
@role = role
|
16
|
-
template_puma 'run-puma', "#{fetch(:tmp_dir)}/run-puma", role
|
9
|
+
git_plugin.template_puma 'run-puma', "#{fetch(:tmp_dir)}/run-puma", role
|
17
10
|
execute "chmod +x #{fetch(:tmp_dir)}/run-puma"
|
18
11
|
sudo "mv #{fetch(:tmp_dir)}/run-puma #{fetch(:puma_run_path)}"
|
19
12
|
if test '[ -f /etc/redhat-release ]'
|
20
13
|
#RHEL flavor OS
|
21
|
-
rhel_install
|
14
|
+
git_plugin.rhel_install
|
22
15
|
elsif test '[ -f /etc/lsb-release ]'
|
23
16
|
#Debian flavor OS
|
24
|
-
debian_install
|
17
|
+
git_plugin.debian_install
|
25
18
|
else
|
26
19
|
#Some other OS
|
27
20
|
error 'This task is not supported for your OS'
|
@@ -30,23 +23,6 @@ namespace :puma do
|
|
30
23
|
end
|
31
24
|
end
|
32
25
|
|
33
|
-
|
34
|
-
def debian_install
|
35
|
-
template_puma 'puma-deb', "#{fetch(:tmp_dir)}/puma", @role
|
36
|
-
execute "chmod +x #{fetch(:tmp_dir)}/puma"
|
37
|
-
sudo "mv #{fetch(:tmp_dir)}/puma /etc/init.d/puma"
|
38
|
-
sudo 'update-rc.d -f puma defaults'
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def rhel_install
|
43
|
-
template_puma 'puma-rpm', "#{fetch(:tmp_dir)}/puma" , @role
|
44
|
-
execute "chmod +x #{fetch(:tmp_dir)}/puma"
|
45
|
-
sudo "mv #{fetch(:tmp_dir)}/puma /etc/init.d/puma"
|
46
|
-
sudo 'chkconfig --add puma'
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
26
|
desc 'Setup Puma config and install jungle script'
|
51
27
|
task :setup do
|
52
28
|
invoke 'puma:config'
|
@@ -76,6 +52,5 @@ namespace :puma do
|
|
76
52
|
end
|
77
53
|
end
|
78
54
|
end
|
79
|
-
|
80
55
|
end
|
81
56
|
end
|
@@ -1,10 +1,4 @@
|
|
1
|
-
|
2
|
-
task :defaults do
|
3
|
-
set :puma_monit_conf_dir, -> { "/etc/monit/conf.d/#{puma_monit_service_name}.conf" }
|
4
|
-
set :puma_monit_use_sudo, true
|
5
|
-
set :puma_monit_bin, '/usr/bin/monit'
|
6
|
-
end
|
7
|
-
end
|
1
|
+
git_plugin = self
|
8
2
|
|
9
3
|
namespace :puma do
|
10
4
|
namespace :monit do
|
@@ -12,7 +6,7 @@ namespace :puma do
|
|
12
6
|
task :config do
|
13
7
|
on roles(fetch(:puma_role)) do |role|
|
14
8
|
@role = role
|
15
|
-
template_puma 'puma_monit.conf', "#{fetch(:tmp_dir)}/monit.conf", @role
|
9
|
+
git_plugin.template_puma 'puma_monit.conf', "#{fetch(:tmp_dir)}/monit.conf", @role
|
16
10
|
sudo_if_needed "mv #{fetch(:tmp_dir)}/monit.conf #{fetch(:puma_monit_conf_dir)}"
|
17
11
|
sudo_if_needed "#{fetch(:puma_monit_bin)} reload"
|
18
12
|
end
|
@@ -62,20 +56,5 @@ namespace :puma do
|
|
62
56
|
end
|
63
57
|
end
|
64
58
|
|
65
|
-
before 'deploy:updating', 'puma:monit:unmonitor'
|
66
|
-
after 'deploy:published', 'puma:monit:monitor'
|
67
|
-
|
68
|
-
def puma_monit_service_name
|
69
|
-
fetch(:puma_monit_service_name, "puma_#{fetch(:application)}_#{fetch(:stage)}")
|
70
|
-
end
|
71
|
-
|
72
|
-
def sudo_if_needed(command)
|
73
|
-
if fetch(:puma_monit_use_sudo)
|
74
|
-
sudo command
|
75
|
-
else
|
76
|
-
execute command
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
59
|
end
|
81
60
|
end
|
@@ -1,22 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Nginx and puma configuration
|
4
|
-
set :nginx_config_name, -> { "#{fetch(:application)}_#{fetch(:stage)}" }
|
5
|
-
set :nginx_sites_available_path, -> { '/etc/nginx/sites-available' }
|
6
|
-
set :nginx_sites_enabled_path, -> { '/etc/nginx/sites-enabled' }
|
7
|
-
set :nginx_server_name, -> { "localhost #{fetch(:application)}.local" }
|
8
|
-
set :nginx_flags, -> { 'fail_timeout=0' }
|
9
|
-
set :nginx_http_flags, -> { fetch(:nginx_flags) }
|
10
|
-
set :nginx_socket_flags, -> { fetch(:nginx_flags) }
|
11
|
-
set :nginx_use_ssl, false
|
12
|
-
end
|
13
|
-
end
|
1
|
+
git_plugin = self
|
2
|
+
|
14
3
|
namespace :puma do
|
15
4
|
desc 'Setup nginx configuration'
|
16
5
|
task :nginx_config do
|
17
6
|
on roles(fetch(:puma_nginx, :web)) do |role|
|
18
|
-
puma_switch_user(role) do
|
19
|
-
template_puma('nginx_conf', "/tmp/nginx_#{fetch(:nginx_config_name)}", role)
|
7
|
+
git_plugin.puma_switch_user(role) do
|
8
|
+
git_plugin.template_puma('nginx_conf', "/tmp/nginx_#{fetch(:nginx_config_name)}", role)
|
20
9
|
sudo :mv, "/tmp/nginx_#{fetch(:nginx_config_name)} #{fetch(:nginx_sites_available_path)}/#{fetch(:nginx_config_name)}"
|
21
10
|
sudo :ln, '-fs', "#{fetch(:nginx_sites_available_path)}/#{fetch(:nginx_config_name)} #{fetch(:nginx_sites_enabled_path)}/#{fetch(:nginx_config_name)}"
|
22
11
|
end
|
@@ -1,52 +1,17 @@
|
|
1
|
-
|
2
|
-
task :defaults do
|
3
|
-
set :puma_default_hooks, -> { true }
|
4
|
-
set :puma_role, :app
|
5
|
-
set :puma_env, -> { fetch(:rack_env, fetch(:rails_env, fetch(:stage))) }
|
6
|
-
# Configure "min" to be the minimum number of threads to use to answer
|
7
|
-
# requests and "max" the maximum.
|
8
|
-
set :puma_threads, [0, 16]
|
9
|
-
set :puma_workers, 0
|
10
|
-
set :puma_rackup, -> { File.join(current_path, 'config.ru') }
|
11
|
-
set :puma_state, -> { File.join(shared_path, 'tmp', 'pids', 'puma.state') }
|
12
|
-
set :puma_pid, -> { File.join(shared_path, 'tmp', 'pids', 'puma.pid') }
|
13
|
-
set :puma_bind, -> { File.join("unix://#{shared_path}", 'tmp', 'sockets', 'puma.sock') }
|
14
|
-
set :puma_default_control_app, -> { File.join("unix://#{shared_path}", 'tmp', 'sockets', 'pumactl.sock') }
|
15
|
-
set :puma_conf, -> { File.join(shared_path, 'puma.rb') }
|
16
|
-
set :puma_access_log, -> { File.join(shared_path, 'log', 'puma_access.log') }
|
17
|
-
set :puma_error_log, -> { File.join(shared_path, 'log', 'puma_error.log') }
|
18
|
-
set :puma_init_active_record, false
|
19
|
-
set :puma_preload_app, false
|
20
|
-
|
21
|
-
# Chruby, Rbenv and RVM integration
|
22
|
-
append :chruby_map_bins, 'puma', 'pumactl'
|
23
|
-
append :rbenv_map_bins, 'puma', 'pumactl'
|
24
|
-
append :rvm_map_bins, 'puma', 'pumactl'
|
25
|
-
|
26
|
-
# Bundler integration
|
27
|
-
append :bundle_bins, 'puma', 'pumactl'
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
namespace :deploy do
|
32
|
-
before :starting, :check_puma_hooks do
|
33
|
-
invoke 'puma:add_default_hooks' if fetch(:puma_default_hooks)
|
34
|
-
end
|
35
|
-
end
|
1
|
+
git_plugin = self
|
36
2
|
|
37
3
|
namespace :puma do
|
38
|
-
|
39
4
|
desc 'Setup Puma config file'
|
40
5
|
task :config do
|
41
6
|
on roles(fetch(:puma_role)) do |role|
|
42
|
-
|
7
|
+
git_plugin.upload_puma_rb(role)
|
43
8
|
end
|
44
9
|
end
|
45
10
|
|
46
11
|
desc 'Start puma'
|
47
12
|
task :start do
|
48
|
-
on roles
|
49
|
-
puma_switch_user(role) do
|
13
|
+
on roles(fetch(:puma_role)) do |role|
|
14
|
+
git_plugin.puma_switch_user(role) do
|
50
15
|
if test "[ -f #{fetch(:puma_conf)} ]"
|
51
16
|
info "using conf file #{fetch(:puma_conf)}"
|
52
17
|
else
|
@@ -71,7 +36,7 @@ namespace :puma do
|
|
71
36
|
task command do
|
72
37
|
on roles (fetch(:puma_role)) do |role|
|
73
38
|
within current_path do
|
74
|
-
puma_switch_user(role) do
|
39
|
+
git_plugin.puma_switch_user(role) do
|
75
40
|
with rack_env: fetch(:puma_env) do
|
76
41
|
if test "[ -f #{fetch(:puma_pid)} ]"
|
77
42
|
if test :kill, "-0 $( cat #{fetch(:puma_pid)} )"
|
@@ -96,7 +61,7 @@ namespace :puma do
|
|
96
61
|
task command do
|
97
62
|
on roles (fetch(:puma_role)) do |role|
|
98
63
|
within current_path do
|
99
|
-
puma_switch_user(role) do
|
64
|
+
git_plugin.puma_switch_user(role) do
|
100
65
|
with rack_env: fetch(:puma_env) do
|
101
66
|
if test "[ -f #{fetch(:puma_pid)} ]" and test :kill, "-0 $( cat #{fetch(:puma_pid)} )"
|
102
67
|
# NOTE pid exist but state file is nonsense, so ignore that case
|
@@ -113,12 +78,11 @@ namespace :puma do
|
|
113
78
|
end
|
114
79
|
|
115
80
|
task :check do
|
116
|
-
on roles
|
81
|
+
on roles(fetch(:puma_role)) do |role|
|
117
82
|
#Create puma.rb for new deployments
|
118
83
|
unless test "[ -f #{fetch(:puma_conf)} ]"
|
119
84
|
warn 'puma.rb NOT FOUND!'
|
120
|
-
|
121
|
-
template_puma 'puma', fetch(:puma_conf), role
|
85
|
+
git_plugin.upload_puma_rb(role)
|
122
86
|
info 'puma.rb generated'
|
123
87
|
end
|
124
88
|
end
|
@@ -126,77 +90,11 @@ namespace :puma do
|
|
126
90
|
|
127
91
|
|
128
92
|
task :smart_restart do
|
129
|
-
if !puma_preload_app? && puma_workers.to_i > 1
|
93
|
+
if !git_plugin.puma_preload_app? && git_plugin.puma_workers.to_i > 1
|
130
94
|
invoke 'puma:phased-restart'
|
131
95
|
else
|
132
96
|
invoke 'puma:restart'
|
133
97
|
end
|
134
98
|
end
|
135
99
|
|
136
|
-
def puma_switch_user(role, &block)
|
137
|
-
user = puma_user(role)
|
138
|
-
if user == role.user
|
139
|
-
block.call
|
140
|
-
else
|
141
|
-
as user do
|
142
|
-
block.call
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def puma_user(role)
|
148
|
-
properties = role.properties
|
149
|
-
properties.fetch(:puma_user) || # local property for puma only
|
150
|
-
fetch(:puma_user) ||
|
151
|
-
properties.fetch(:run_as) || # global property across multiple capistrano gems
|
152
|
-
role.user
|
153
|
-
end
|
154
|
-
|
155
|
-
def puma_workers
|
156
|
-
fetch(:puma_workers, 0)
|
157
|
-
end
|
158
|
-
|
159
|
-
def puma_preload_app?
|
160
|
-
fetch(:puma_preload_app)
|
161
|
-
end
|
162
|
-
|
163
|
-
def puma_bind
|
164
|
-
Array(fetch(:puma_bind)).collect do |bind|
|
165
|
-
"bind '#{bind}'"
|
166
|
-
end.join("\n")
|
167
|
-
end
|
168
|
-
|
169
|
-
def puma_plugins
|
170
|
-
Array(fetch(:puma_plugins)).collect do |bind|
|
171
|
-
"plugin '#{bind}'"
|
172
|
-
end.join("\n")
|
173
|
-
end
|
174
|
-
|
175
|
-
def template_puma(from, to, role)
|
176
|
-
[
|
177
|
-
"lib/capistrano/templates/#{from}-#{role.hostname}-#{fetch(:stage)}.rb",
|
178
|
-
"lib/capistrano/templates/#{from}-#{role.hostname}.rb",
|
179
|
-
"lib/capistrano/templates/#{from}-#{fetch(:stage)}.rb",
|
180
|
-
"lib/capistrano/templates/#{from}.rb.erb",
|
181
|
-
"lib/capistrano/templates/#{from}.rb",
|
182
|
-
"lib/capistrano/templates/#{from}.erb",
|
183
|
-
"config/deploy/templates/#{from}.rb.erb",
|
184
|
-
"config/deploy/templates/#{from}.rb",
|
185
|
-
"config/deploy/templates/#{from}.erb",
|
186
|
-
File.expand_path("../../templates/#{from}.rb.erb", __FILE__),
|
187
|
-
File.expand_path("../../templates/#{from}.erb", __FILE__)
|
188
|
-
].each do |path|
|
189
|
-
if File.file?(path)
|
190
|
-
erb = File.read(path)
|
191
|
-
upload! StringIO.new(ERB.new(erb, nil, '-').result(binding)), to
|
192
|
-
break
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
task :add_default_hooks do
|
198
|
-
after 'deploy:check', 'puma:check'
|
199
|
-
after 'deploy:finished', 'puma:smart_restart'
|
200
|
-
end
|
201
|
-
|
202
100
|
end
|
@@ -1,14 +1,16 @@
|
|
1
|
+
git_plugin = self
|
2
|
+
|
1
3
|
namespace :puma do
|
2
4
|
namespace :workers do
|
3
5
|
desc 'Add a worker'
|
4
6
|
task :count do
|
5
|
-
on roles
|
6
|
-
puma_switch_user(role) do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
on roles(fetch(:puma_role)) do |role|
|
8
|
+
git_plugin.puma_switch_user(role) do
|
9
|
+
#TODO
|
10
|
+
# cleanup
|
11
|
+
# add host name/ip
|
12
|
+
workers_count = capture("ps ax | grep -c 'puma: cluster worker [0-9]: `cat #{fetch(:puma_pid)}`'").to_i - 1
|
13
|
+
log "Workers count : #{workers_count}"
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
@@ -19,8 +21,8 @@ namespace :puma do
|
|
19
21
|
# Refactor
|
20
22
|
desc 'Worker++'
|
21
23
|
task :more do
|
22
|
-
on roles
|
23
|
-
puma_switch_user(role) do
|
24
|
+
on roles(fetch(:puma_role)) do |role|
|
25
|
+
git_plugin.puma_switch_user(role) do
|
24
26
|
execute(:kill, "-TTIN `cat #{fetch(:puma_pid)}`")
|
25
27
|
end
|
26
28
|
end
|
@@ -28,8 +30,8 @@ namespace :puma do
|
|
28
30
|
|
29
31
|
desc 'Worker--'
|
30
32
|
task :less do
|
31
|
-
on roles
|
32
|
-
puma_switch_user(role) do
|
33
|
+
on roles(fetch(:puma_role)) do |role|
|
34
|
+
git_plugin.puma_switch_user(role) do
|
33
35
|
execute(:kill, "-TTOU `cat #{fetch(:puma_pid)}`")
|
34
36
|
end
|
35
37
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano3-puma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Abdelkader Boudih
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '3.
|
19
|
+
version: '3.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '3.
|
26
|
+
version: '3.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: capistrano-bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,7 +91,8 @@ homepage: https://github.com/seuros/capistrano-puma
|
|
91
91
|
licenses:
|
92
92
|
- MIT
|
93
93
|
metadata: {}
|
94
|
-
post_install_message:
|
94
|
+
post_install_message: "\n [capistrano-puma] Plugins need to be explicitly installed
|
95
|
+
with install_plugin.\n Please see README.md\n "
|
95
96
|
rdoc_options: []
|
96
97
|
require_paths:
|
97
98
|
- lib
|