capistrano3-puma 0.0.7 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e2faa760ffae1290576f528f6108b2eee9043b4d
4
- data.tar.gz: 71937a3ba57f88c3c0f235d57a17956ee9f94ec8
3
+ metadata.gz: 6d71dc0edb29b8856ac842c1fad416d01c7f6956
4
+ data.tar.gz: d31c166a6ab2e6bab255b6753a28e3b8b2b25fd5
5
5
  SHA512:
6
- metadata.gz: 3dfeb25613924201beabe6e40918791fe8dcf4bda0683f4fdfe66f0918ec8edada386ec7d3aa09248175ee47c79f12cfbb9aba85d63c867bd88d84157d4e5946
7
- data.tar.gz: 854ceb68a80b8ad7b860f83c36d8b909abb9df04492f47d764cbf936dbc5ee358ba301ae9d1130289d1ba7222a378d9daa4beb32eb58a513302e1c0a666fe01a
6
+ metadata.gz: 3da657d08ba95d780293a1bf19997a423dd895f251eec9d58f673d8bfb9af36a696b722f4648637cecc2303f5266d96cf4bc501c66783739a16b24917a751c7e
7
+ data.tar.gz: d24f24ffcc1b129c440ede8df04acd30223ff30b534358ac6b96f3e5f0db024b4be86576031ba8163273ab410aa8bf3b1beb2ce48cb8e69cda4fbbcbe0bf58b2
data/README.md CHANGED
@@ -6,41 +6,57 @@ Add this line to your application's Gemfile:
6
6
 
7
7
  gem 'capistrano-puma', github: "seuros/capistrano-puma"
8
8
 
9
+ or:
10
+
11
+ gem 'capistrano3-puma'
12
+
9
13
  And then execute:
10
14
 
11
15
  $ bundle
12
16
 
13
17
  ## Usage
14
-
18
+ ```ruby
15
19
  # Capfile
16
20
 
17
- require 'capistrano/puma'
18
- require 'capistrano/puma/jungle' #if you need the jungle tasks
19
-
21
+ require 'capistrano/puma'
22
+ require 'capistrano/puma/jungle' #if you need the jungle tasks
23
+ ```
20
24
 
21
25
 
22
26
  Configurable options, shown here with defaults:
23
-
27
+ ```ruby
24
28
  set :puma_state, "#{shared_path}/tmp/pids/puma.state"
25
29
  set :puma_pid, "#{shared_path}/tmp/pids/puma.pid"
26
30
  set :puma_bind, "unix://#{shared_path}/tmp/sockets/puma.sock"
27
- set :puma_conf, "#{shared_path}/config/puma.rb"
31
+ set :puma_conf, "#{shared_path}/puma.rb"
28
32
  set :puma_access_log, "#{shared_path}/log/puma_error.log"
29
33
  set :puma_error_log, "#{shared_path}/log/puma_access.log"
30
34
  set :puma_role, :app
31
35
  set :puma_env, fetch(:rack_env, fetch(:rails_env, 'production'))
32
36
  set :puma_threads, [0, 16]
33
37
  set :puma_workers, 0
38
+ ```
39
+ For Jungle tasks (beta), these options exist:
40
+ ```ruby
41
+ set :puma_jungle_conf, '/etc/puma.conf'
42
+ set :puma_run_path, '/usr/local/bin/run-puma'
43
+ ```
44
+ Ensure that the following directories are shared (via ``linked_dirs``):
34
45
 
35
- For RVM users, it is advisable to set in your deploy.rb for now :
36
- set :puma_cmd, "#{fetch(:bundle_cmd, 'bundle')} exec puma"
37
- set :pumactl_cmd, "#{fetch(:bundle_cmd, 'bundle')} exec pumactl"
46
+ tmp/pids tmp/sockets log
38
47
 
48
+ ## Changelog
39
49
 
50
+ - 0.1.0: Phased restart will be used if puma is in cluster mode
51
+ - 0.0.9: puma.rb location changed to shared_path root. puma:check moved to after deploy:check
52
+ - 0.0.8: puma.rb is automatically generated if not present. Fixed RVM issue.
53
+ - 0.0.7: Gem pushed to rubygems as capistrano3-puma. Support of Redhat based OS for Jungle init script.
40
54
 
41
55
  ## Contributors
42
56
 
43
57
  [molfar](https://github.com/molfar)
58
+ [ayaya](https://github.com/ayamomiji)
59
+ [Shane O'Grady](https://github.com/shaneog)
44
60
 
45
61
 
46
62
  ## Contributing
@@ -0,0 +1,2 @@
1
+ #load monit tasks
2
+ load File.expand_path('../../tasks/monit.cap', __FILE__)
@@ -0,0 +1,2 @@
1
+ #load nginx tasks
2
+ load File.expand_path('../../tasks/nginx.cap', __FILE__)
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Puma
3
- VERSION = '0.0.7'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
@@ -15,16 +15,15 @@ namespace :puma do
15
15
  template_puma 'run-puma.erb', "#{fetch(:tmp_dir)}/run-puma"
16
16
  execute "chmod +x #{fetch(:tmp_dir)}/run-puma"
17
17
  sudo "mv #{fetch(:tmp_dir)}/run-puma #{fetch(:puma_run_path)}"
18
- if test "[ -f /etc/lsb-release ]"
18
+ if test '[ -f /etc/lsb-release ]'
19
19
  #Debian flavor OS
20
20
  debian_install
21
- elsif test "[ -f /etc/redhat-release ]"
21
+ elsif test '[ -f /etc/redhat-release ]'
22
22
  #RHEL flavor OS
23
23
  rhel_install
24
24
  else
25
25
  #Some other OS
26
- #TODO write in the error log
27
- puts 'This task is not supported for your OS'
26
+ error 'This task is not supported for your OS'
28
27
  end
29
28
  sudo "touch #{fetch(:puma_jungle_conf)}"
30
29
  end
@@ -35,7 +34,7 @@ namespace :puma do
35
34
  template_puma 'puma-deb.erb', "#{fetch(:tmp_dir)}/puma"
36
35
  execute "chmod +x #{fetch(:tmp_dir)}/puma"
37
36
  sudo "mv #{fetch(:tmp_dir)}/puma /etc/init.d/puma"
38
- sudo "update-rc.d -f puma defaults"
37
+ sudo 'update-rc.d -f puma defaults'
39
38
 
40
39
  end
41
40
 
@@ -43,7 +42,7 @@ namespace :puma do
43
42
  template_puma 'puma-rpm.erb', "#{fetch(:tmp_dir)}/puma"
44
43
  execute "chmod +x #{fetch(:tmp_dir)}/puma"
45
44
  sudo "mv #{fetch(:tmp_dir)}/puma /etc/init.d/puma"
46
- sudo "chkconfig --add puma"
45
+ sudo 'chkconfig --add puma'
47
46
  end
48
47
 
49
48
 
@@ -0,0 +1,32 @@
1
+ namespace :load do
2
+ task :defaults do
3
+ # set :puma_monit, -> { File.join(shared_path, 'tmp', 'pids', 'puma.state') }
4
+ end
5
+ end
6
+
7
+
8
+ namespace :puma do
9
+ namespace :monit do
10
+ desc 'Config Puma monit-service'
11
+ task :config do
12
+ on roles(fetch(:puma_role)) do
13
+ template_puma 'monit.conf.erb', "#{fetch(:tmp_dir)}/monit.test"
14
+ end
15
+ end
16
+
17
+ desc 'Enable Puma monit-service'
18
+ task :enable do
19
+ on roles(fetch(:puma_role)) do
20
+
21
+ end
22
+ end
23
+
24
+ desc 'Disable Puma monit-service'
25
+ task :disable do
26
+ on roles(fetch(:puma_role)) do
27
+
28
+ end
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,17 @@
1
+ namespace :load do
2
+ task :defaults do
3
+ set :nginx_access_log, -> { File.join(shared_path, 'log', 'nginx_error.log') }
4
+ set :nginx_error_log, -> { File.join(shared_path, 'log', 'nginx_access.log') }
5
+ end
6
+ end
7
+
8
+ namespace :puma do
9
+ namespace :nginx do
10
+ desc 'Config Puma nginx-server'
11
+ task :config do
12
+ on roles(fetch(:puma_role)) do
13
+ template_puma 'nginx.conf.erb', "#{fetch(:tmp_dir)}/nginx.test"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  namespace :deploy do
2
- after :finished, 'puma:restart'
2
+ after :finished, 'puma:smart_restart'
3
3
  end
4
4
 
5
5
  namespace :load do
@@ -13,7 +13,7 @@ namespace :load do
13
13
  set :puma_state, -> { File.join(shared_path, 'tmp', 'pids', 'puma.state') }
14
14
  set :puma_pid, -> { File.join(shared_path, 'tmp', 'pids', 'puma.pid') }
15
15
  set :puma_bind, -> { File.join('unix://', shared_path, 'tmp', 'sockets', 'puma.sock') }
16
- set :puma_conf, -> { File.join(shared_path, 'config', 'puma.rb') }
16
+ set :puma_conf, -> { File.join(shared_path, 'puma.rb') }
17
17
  set :puma_access_log, -> { File.join(shared_path, 'log', 'puma_error.log') }
18
18
  set :puma_error_log, -> { File.join(shared_path, 'log', 'puma_access.log') }
19
19
 
@@ -36,32 +36,68 @@ namespace :puma do
36
36
  task :start do
37
37
  on roles (fetch(:puma_role)) do
38
38
  within current_path do
39
- # RVM has issues with bundler
40
- if fetch(:puma_cmd)
41
- execute "#{fetch(:puma_cmd)} -C #{fetch(:puma_conf)}"
42
- else
43
- execute :puma, "-C #{fetch(:puma_conf)}"
44
- end
39
+ execute :bundle, 'exec', :puma, "-C #{fetch(:puma_conf)}"
45
40
  end
46
41
  end
47
42
  end
48
43
 
49
- %w[halt stop restart phased-restart status].each do |command|
44
+ %w[halt stop phased-restart status].each do |command|
50
45
  desc "#{command} puma"
51
46
  task command do
52
47
  on roles (fetch(:puma_role)) do
53
48
  within current_path do
54
- # RVM has issues with bundler
55
- if fetch(:pumactl_cmd)
56
- execute "#{fetch(:pumactl_cmd)} -S #{fetch(:puma_state)} #{command}"
57
- else
58
- execute :pumactl, "-S #{fetch(:puma_state)} #{command}"
59
- end
49
+ execute :bundle, 'exec', :pumactl, "-S #{fetch(:puma_state)} #{command}"
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ desc 'Restart puma'
56
+ task :restart do
57
+ on roles (fetch(:puma_role)) do
58
+ within current_path do
59
+ if test "[ -f #{fetch(:puma_state)} ]"
60
+ execute :bundle, 'exec', :pumactl, "-S #{fetch(:puma_state)} restart"
61
+ else
62
+ # Puma is not running or state file is not present : Run it
63
+ # TODO check for pid
64
+ execute :bundle, 'exec', :puma, "-C #{fetch(:puma_conf)}"
60
65
  end
61
66
  end
62
67
  end
63
68
  end
64
69
 
70
+
71
+ task :check do
72
+ on roles (fetch(:puma_role)) do
73
+ #Create puma.rb for new deployments
74
+ unless test "[ -f #{fetch(:puma_conf)} ]"
75
+ warn 'puma.rb NOT FOUND!'
76
+ #TODO DRY
77
+ template_puma 'puma.rb.erb', fetch(:puma_conf)
78
+ info 'puma.rb generated'
79
+ end
80
+ end
81
+ end
82
+ after 'deploy:check', 'puma:check'
83
+
84
+ task :smart_restart do
85
+ if puma_workers.to_i > 1
86
+ invoke 'puma:phased-restart'
87
+ else
88
+ invoke 'puma:restart'
89
+ end
90
+ end
91
+
92
+ def processors_count
93
+ #TODO , will be used to warn if # of workers is > of available cores
94
+ capture 'grep -c processor /proc/cpuinfo'
95
+ end
96
+
97
+ def puma_workers
98
+ fetch(:puma_workers) || 0
99
+ end
100
+
65
101
  def template_puma(from, to)
66
102
  erb = File.read(File.expand_path("../../templates/#{from}", __FILE__))
67
103
  upload! StringIO.new(ERB.new(erb).result(binding)), to
@@ -0,0 +1,14 @@
1
+ # Monit configuration for Puma
2
+ # Service name: <%= fetch(:puma_monit_service_name) %>
3
+ #
4
+ check process <%= fetch(:puma_monit_service_name) %>
5
+ with pidfile <%= fetch(:puma_pid) %>
6
+ start program = "/bin/su - <%= fetch(:user) %> -c '/usr/bin/env PATH=/home/user/.rbenv/shims:/home/user/.rbenv/bin:$PATH /home/user/puma.sh start'"
7
+ stop program = "/bin/su - <%= fetch(:user) %> -c '/usr/bin/env PATH=/home/user/.rbenv/shims:/home/user/.rbenv/bin:$PATH /home/user/puma.sh stop'"
8
+ if mem is greater than <%= fetch(:puma_monit_memory_alert_threshold) %> then alert
9
+ if mem is greater than <%= fetch(:puma_monit_memory_restart_threshold) %> then restart
10
+ if cpu is greater than <%= fetch(:puma_monit_cpu_alert_threshold) %> then alert
11
+ if cpu is greater than <%= fetch(:puma_monit_cpu_restart_threshold) %> then restart
12
+
13
+
14
+
@@ -0,0 +1,216 @@
1
+ # Nginx configuration
2
+ # <%= "#{fetch(:application)} running as #{fetch(:user)} in environment production" %>
3
+ #
4
+ #
5
+
6
+ upstream <%= fetch(:application) %> {
7
+ server <%= fetch(:puma_bind) %> fail_timeout=0;
8
+ }
9
+
10
+ <% if fetch(:nginx_uses_http) %>
11
+ #
12
+ # HTTP server configuration
13
+ #
14
+ server {
15
+ listen <%= fetch(:nginx_port) %>;
16
+ client_max_body_size <%= fetch(:nginx_client_max_body_size) %>;
17
+ server_name <%= fetch(:server_names, '_') %>;
18
+
19
+ # ~2 seconds is often enough for most folks to parse HTML/CSS and
20
+ # retrieve needed images/icons/frames, connections are cheap in
21
+ # nginx so increasing this is generally safe...
22
+ # 8 seconds might be needed for some mobile devs
23
+ keepalive_timeout 8;
24
+
25
+ # path for static files
26
+ root <%= fetch(:deploy_to) %>/current/public;
27
+ access_log <%= fetch(:nginx_access_log) %>;
28
+ error_log <%= fetch(:nginx_error_log) %> info;
29
+
30
+ # this rewrites all the requests to the maintenance.html
31
+ # page if it exists in the doc root. This is for capistrano's
32
+ # disable web task
33
+ if (-f $document_root/system/maintenance.html) {
34
+ rewrite ^(.*)$ /system/maintenance.html last;
35
+ break;
36
+ }
37
+
38
+ location / {
39
+ <% if fetch(:nginx_use_simple_auth) %>
40
+ auth_basic "<%= fetch(:nginx_simple_auth_message) %>";
41
+ auth_basic_user_file <%= fetch(:nginx_remote_htpasswd) %>;
42
+ <% end %>
43
+
44
+ # needed to forward user's IP address to rails
45
+ proxy_set_header X-Real-IP $remote_addr;
46
+
47
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
48
+ proxy_set_header Host $http_host;
49
+
50
+ # if the request is for a static resource, nginx should serve it directly
51
+ # and add a far future expires header to it, making the browser
52
+ # cache the resource and navigate faster over the website.
53
+ location ~ ^/(assets)/.+-([0-9a-zA-Z])+\. {
54
+ gzip_static on;
55
+ expires max;
56
+ add_header Cache-Control public;
57
+ }
58
+
59
+ # Serve images outside the asset path
60
+ # Now this supposedly should work as it gets the filenames with querystrings that Rails provides.
61
+ # BUT there's a chance it could break the ajax calls.
62
+ location ~* \.(ico|css|gif|jpe?g|png)(\?[0-9]+)?$ {
63
+ expires max;
64
+ }
65
+
66
+ # Serve javascript outside the asset path
67
+ location ~ ^/javascripts/.*\.js(\?[0-9]+)?$ {
68
+ expires max;
69
+ }
70
+
71
+ # If the file exists as a static file serve it directly without
72
+ # running all the other rewrite tests on it
73
+ if (-f $request_filename) {
74
+ break;
75
+ }
76
+
77
+ # check for index.html for directory index
78
+ # if its there on the filesystem then rewite
79
+ # the url to add /index.html to the end of it
80
+ # and then break to send it to the next config rules.
81
+ if (-f $request_filename/index.html) {
82
+ rewrite (.*) $1/index.html break;
83
+ }
84
+
85
+ # this is the meat of the rails page caching config
86
+ # it adds .html to the end of the url and then checks
87
+ # the filesystem for that file. If it exists, then we
88
+ # rewite the url to have explicit .html on the end
89
+ # and then send it on its way to the next config rule.
90
+ # if there is no file on the fs then it sets all the
91
+ # necessary headers and proxies to our upstream mongrels
92
+ if (-f $request_filename.html) {
93
+ rewrite (.*) $1.html break;
94
+ }
95
+
96
+ if (!-f $request_filename) {
97
+ proxy_pass http://<%= upstream_name %>;
98
+ break;
99
+ }
100
+ }
101
+
102
+ # Rails error pages
103
+ error_page 500 502 503 504 /500.html;
104
+ location = /500.html {
105
+ root <%= fetch(:deploy_to) %>/current/public;
106
+ }
107
+ }
108
+ <% end %>
109
+
110
+ <% if fetch(:nginx_uses_ssl) %>
111
+ #
112
+ # HTTPs server configuration
113
+ #
114
+ upstream <%= upstream_name_ssl %> {
115
+ server unix:<%= File.join("#{fetch(:shared_path)}","sockets", "puma.sock") %> fail_timeout=0;
116
+ }
117
+
118
+ # This server is setup for ssl. Uncomment if
119
+ # you are using ssl as well as port 80.
120
+ server {
121
+ listen <%= fetch(:nginx_ssl_port) %>;
122
+ client_max_body_size 500M;
123
+ server_name <%= fetch(:server_names) %>;
124
+ ssl on;
125
+ ssl_certificate <%= fetch(:nginx_ssl_public_crt) %>;
126
+ ssl_certificate_key <%= fetch(:nginx_ssl_private_key) %>;
127
+ ssl_session_timeout 5m;
128
+ client_max_body_size <%= fetch(:nginx_ssl_client_max_body_size) %>;
129
+
130
+ root <%= fetch(:deploy_to) %>/current/public;
131
+ access_log <%= fetch(:nginx_log_path) %>;
132
+ error_log <%= fetch(:nginx_log_path) %> info;
133
+
134
+ # this rewrites all the requests to the maintenance.html
135
+ # page if it exists in the doc root. This is for capistrano's
136
+ # disable web task
137
+ if (-f $document_root/system/maintenance.html) {
138
+ rewrite ^(.*)$ /system/maintenance.html last;
139
+ break;
140
+ }
141
+
142
+ location / {
143
+ <% if fetch(:nginx_ssl_use_simple_auth) %>
144
+ auth_basic "<%= fetch(:nginx_simple_auth_message) %>";
145
+ auth_basic_user_file <%= fetch(:nginx_remote_htpasswd) %>;
146
+ <% end %>
147
+
148
+ # needed to forward user's IP address to rails
149
+ proxy_set_header X-Real-IP $remote_addr;
150
+
151
+ # needed for HTTPS
152
+ proxy_set_header X_FORWARDED_PROTO https;
153
+
154
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
155
+ proxy_set_header Host $http_host;
156
+ proxy_redirect off;
157
+ proxy_max_temp_file_size 0;
158
+
159
+ # if the request is for a static resource, nginx should serve it directly
160
+ # and add a far future expires header to it, making the browser
161
+ # cache the resource and navigate faster over the website.
162
+ location ~ ^/(assets)/.+-([0-9a-zA-Z])+\. {
163
+ gzip_static on;
164
+ expires max;
165
+ add_header Cache-Control public;
166
+ }
167
+
168
+ # Serve images outside the asset path
169
+ # Now this supposedly should work as it gets the filenames with querystrings that Rails provides.
170
+ # BUT there's a chance it could break the ajax calls.
171
+ location ~* \.(ico|css|gif|jpe?g|png)(\?[0-9]+)?$ {
172
+ expires max;
173
+ }
174
+
175
+ # Serve javascript outside the asset path
176
+ location ~ ^/javascripts/.*\.js(\?[0-9]+)?$ {
177
+ expires max;
178
+ }
179
+
180
+ # If the file exists as a static file serve it directly without
181
+ # running all the other rewite tests on it
182
+ if (-f $request_filename) {
183
+ break;
184
+ }
185
+
186
+ # check for index.html for directory index
187
+ # if its there on the filesystem then rewite
188
+ # the url to add /index.html to the end of it
189
+ # and then break to send it to the next config rules.
190
+ if (-f $request_filename/index.html) {
191
+ rewrite (.*) $1/index.html break;
192
+ }
193
+
194
+ # this is the meat of the rails page caching config
195
+ # it adds .html to the end of the url and then checks
196
+ # the filesystem for that file. If it exists, then we
197
+ # rewite the url to have explicit .html on the end
198
+ # and then send it on its way to the next config rule.
199
+ # if there is no file on the fs then it sets all the
200
+ # necessary headers and proxies to our upstream mongrels
201
+ if (-f $request_filename.html) {
202
+ rewrite (.*) $1.html break;
203
+ }
204
+
205
+ if (!-f $request_filename) {
206
+ proxy_pass http://<%= upstream_name_ssl %>;
207
+ break;
208
+ }
209
+ }
210
+
211
+ error_page 500 502 503 504 /500.html;
212
+ location = /500.html {
213
+ root <%= fetch(:deploy_to) %>/current/public;
214
+ }
215
+ }
216
+ <% end %>
@@ -10,7 +10,8 @@
10
10
  # placed in /etc/init.d.
11
11
  ### END INIT INFO
12
12
 
13
- # Author: Darío Javier Cravero <dario@exordo.com>
13
+ # Author: Darío Javier Cravero <'dario@exordo.com'>
14
+ # Modified by: Abdelkader Boudih <'terminale@gmail.com'>
14
15
  #
15
16
  # Do NOT "set -e"
16
17
 
@@ -59,7 +60,7 @@ do_start_one() {
59
60
  if [ "`ps -A -o pid= | grep -c $PID`" -eq 0 ]; then
60
61
  do_start_one_do $1 $2
61
62
  else
62
- do_restart_one $1
63
+ do_restart_one $1 $2
63
64
  fi
64
65
  else
65
66
  do_start_one_do $1 $2
@@ -70,7 +71,7 @@ do_start_one_do() {
70
71
  log_daemon_msg "--> Woke up puma $1"
71
72
  log_daemon_msg "user $2"
72
73
  log_daemon_msg "log to $4"
73
- log_daemon_msg "start-stop-daemon --verbose --start --chdir $1 --chuid $2 --background --exec $RUNPUMA -- $1 "
74
+ log_daemon_msg "start-stop-daemon --verbose --start --chdir $1 --chuid $2 --background --exec $RUNPUMA $1 "
74
75
  start-stop-daemon --verbose --start --chdir $1 --chuid $2 --background --exec $RUNPUMA -- $1
75
76
  }
76
77
 
@@ -81,7 +82,8 @@ do_stop() {
81
82
  log_daemon_msg "=> Putting all the beasts to bed..."
82
83
  for i in $JUNGLE; do
83
84
  dir=`echo $i | cut -d , -f 1`
84
- do_stop_one $dir
85
+ user=`echo $i | cut -d , -f 2`
86
+ do_stop_one $dir $user
85
87
  done
86
88
  }
87
89
  #
@@ -97,7 +99,7 @@ do_stop_one() {
97
99
  log_daemon_msg "---> Puma $1 isn't running."
98
100
  else
99
101
  log_daemon_msg "---> About to kill PID `cat $PIDFILE`"
100
- pumactl --state $STATEFILE stop
102
+ su - $2 -c "pumactl --state $STATEFILE stop"
101
103
  # Many daemons don't delete their pidfiles when they exit.
102
104
  rm -f $PIDFILE $STATEFILE
103
105
  fi
@@ -113,7 +115,8 @@ do_stop_one() {
113
115
  do_restart() {
114
116
  for i in $JUNGLE; do
115
117
  dir=`echo $i | cut -d , -f 1`
116
- do_restart_one $dir
118
+ user=`echo $i | cut -d , -f 2`
119
+ do_restart_one $dir $user
117
120
  done
118
121
  }
119
122
 
@@ -127,7 +130,7 @@ do_restart_one() {
127
130
 
128
131
  if [ -e $PIDFILE ]; then
129
132
  log_daemon_msg "--> About to restart puma $1"
130
- pumactl --state $dir/tmp/pids/puma.state restart
133
+ su - $2 -c "pumactl --state $dir/tmp/pids/puma.state restart"
131
134
  # kill -s USR2 `cat $PIDFILE`
132
135
  # TODO Check if process exist
133
136
  else
@@ -135,8 +138,9 @@ do_restart_one() {
135
138
  user=`echo $i | cut -d , -f 2`
136
139
  config_file=`echo $i | cut -d , -f 3`
137
140
  if [ "$config_file" = "" ]; then
138
- config_file="$dir/config/puma.rb"
139
- fi
141
+ config_file="$dir/config/puma.rb"
142
+ do_start_one $dir $user $config_file
143
+ fi
140
144
  log_file=`echo $i | cut -d , -f 4`
141
145
  if [ "$log_file" = "" ]; then
142
146
  log_file="$dir/log/puma.log"
@@ -152,7 +156,8 @@ do_restart_one() {
152
156
  do_status() {
153
157
  for i in $JUNGLE; do
154
158
  dir=`echo $i | cut -d , -f 1`
155
- do_status_one $dir
159
+ user=`echo $i | cut -d , -f 2`
160
+ do_status_one $dir $user
156
161
  done
157
162
  }
158
163
 
@@ -166,9 +171,9 @@ do_status_one() {
166
171
 
167
172
  if [ -e $PIDFILE ]; then
168
173
  log_daemon_msg "--> About to status puma $1"
169
- pumactl --state $dir/tmp/pids/puma.state stats
170
- # kill -s USR2 `cat $PIDFILE`
171
- # TODO Check if process exist
174
+
175
+ su - $2 -c "pumactl --state $dir/tmp/pids/puma.state stats "
176
+
172
177
  else
173
178
  log_daemon_msg "--> $1 isn't there :(..."
174
179
  fi
@@ -238,13 +243,9 @@ else
238
243
  user=`echo $i | cut -d , -f 2`
239
244
  config_file=`echo $i | cut -d , -f 3`
240
245
  if [ "$config_file" = "" ]; then
241
- config_file="$dir/config/puma.rb"
242
- fi
243
- log_file=`echo $i | cut -d , -f 4`
244
- if [ "$log_file" = "" ]; then
245
- log_file="$dir/log/puma.log"
246
- fi
247
- do_start_one $dir $user $config_file $log_file
246
+ config_file="$dir/config/puma.rb"
247
+
248
+ do_start_one $dir $user $config_file
248
249
  fi
249
250
  case "$?" in
250
251
  0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
@@ -9,5 +9,5 @@ stdout_redirect '<%=fetch(:puma_access_log)%>', '<%=fetch(:puma_error_log)%>', t
9
9
  threads <%=fetch(:puma_threads).join(',')%>
10
10
  bind "<%=fetch(:puma_bind)%>"
11
11
 
12
- workers <%=fetch(:puma_workers)%>
12
+ workers <%= puma_workers %>
13
13
  preload_app!
@@ -1,2 +1,9 @@
1
1
  #!/bin/bash
2
- cd $1 && exec bundle exec puma -C config/puma.rb
2
+ app=$1;
3
+ cd $app || exit 1
4
+
5
+ if [ -e Gemfile ]; then
6
+ exec sh -c "exec bundle exec puma -C ../../shared/config/puma.rb"
7
+ else
8
+ exec sh -c "exec puma -C ../../shared/config/puma.rb"
9
+ fi
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano3-puma
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abdelkader Boudih
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-20 00:00:00.000000000 Z
11
+ date: 2013-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.0.0
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
26
  version: 3.0.0
27
27
  description: Puma integration for Capistrano 3
@@ -31,7 +31,7 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
- - ".gitignore"
34
+ - .gitignore
35
35
  - Gemfile
36
36
  - LICENSE.txt
37
37
  - README.md
@@ -41,9 +41,15 @@ files:
41
41
  - lib/capistrano-puma.rb
42
42
  - lib/capistrano/puma.rb
43
43
  - lib/capistrano/puma/jungle.rb
44
+ - lib/capistrano/puma/monit.rb
45
+ - lib/capistrano/puma/nginx.rb
44
46
  - lib/capistrano/puma/version.rb
45
47
  - lib/capistrano/tasks/jungle.cap
48
+ - lib/capistrano/tasks/monit.cap
49
+ - lib/capistrano/tasks/nginx.cap
46
50
  - lib/capistrano/tasks/puma.cap
51
+ - lib/capistrano/templates/monit.conf.erb
52
+ - lib/capistrano/templates/nginx.conf.erb
47
53
  - lib/capistrano/templates/puma-deb.erb
48
54
  - lib/capistrano/templates/puma-rpm.erb
49
55
  - lib/capistrano/templates/puma.rb.erb
@@ -58,17 +64,17 @@ require_paths:
58
64
  - lib
59
65
  required_ruby_version: !ruby/object:Gem::Requirement
60
66
  requirements:
61
- - - ">="
67
+ - - '>='
62
68
  - !ruby/object:Gem::Version
63
69
  version: '0'
64
70
  required_rubygems_version: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - ">="
72
+ - - '>='
67
73
  - !ruby/object:Gem::Version
68
74
  version: '0'
69
75
  requirements: []
70
76
  rubyforge_project:
71
- rubygems_version: 2.0.3
77
+ rubygems_version: 2.0.14
72
78
  signing_key:
73
79
  specification_version: 4
74
80
  summary: Puma integration for Capistrano