capistrano-pumaio 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/Gemfile.lock +2 -2
- data/VERSION +1 -1
- data/capistrano-pumaio.gemspec +6 -5
- data/lib/capistrano/puma/config.rb +7 -1
- data/lib/capistrano/puma/runit.rb +3 -1
- data/templates/runit/config.rb.erb +3 -0
- data/templates/runit/control-q.erb +4 -1
- data/templates/runit/finish.erb +135 -0
- data/templates/runit/run.erb +10 -1
- metadata +6 -5
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -9,7 +9,7 @@ GEM
|
|
9
9
|
net-sftp (>= 2.0.0)
|
10
10
|
net-ssh (>= 2.0.14)
|
11
11
|
net-ssh-gateway (>= 1.1.0)
|
12
|
-
capistrano-base_helper (0.0.
|
12
|
+
capistrano-base_helper (0.0.6)
|
13
13
|
capistrano (>= 2.15.5)
|
14
14
|
faraday (0.8.7)
|
15
15
|
multipart-post (~> 1.1)
|
@@ -65,5 +65,5 @@ PLATFORMS
|
|
65
65
|
DEPENDENCIES
|
66
66
|
bundler (>= 1.3.0)
|
67
67
|
capistrano (>= 2.15.5)
|
68
|
-
capistrano-base_helper (>= 0.0.
|
68
|
+
capistrano-base_helper (>= 0.0.6)
|
69
69
|
jeweler (~> 1.8.6)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/capistrano-pumaio.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "capistrano-pumaio"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Leif Ringstad"]
|
12
|
-
s.date = "2013-07-
|
12
|
+
s.date = "2013-07-08"
|
13
13
|
s.description = "Capistrano recipes for puma using runit and monit."
|
14
14
|
s.email = "leifcr@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
"templates/monit/puma.conf.erb",
|
32
32
|
"templates/runit/config.rb.erb",
|
33
33
|
"templates/runit/control-q.erb",
|
34
|
+
"templates/runit/finish.erb",
|
34
35
|
"templates/runit/log-run.erb",
|
35
36
|
"templates/runit/run.erb"
|
36
37
|
]
|
@@ -45,18 +46,18 @@ Gem::Specification.new do |s|
|
|
45
46
|
|
46
47
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
48
|
s.add_runtime_dependency(%q<capistrano>, [">= 2.15.5"])
|
48
|
-
s.add_runtime_dependency(%q<capistrano-base_helper>, [">= 0.0.
|
49
|
+
s.add_runtime_dependency(%q<capistrano-base_helper>, [">= 0.0.6"])
|
49
50
|
s.add_development_dependency(%q<bundler>, [">= 1.3.0"])
|
50
51
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.6"])
|
51
52
|
else
|
52
53
|
s.add_dependency(%q<capistrano>, [">= 2.15.5"])
|
53
|
-
s.add_dependency(%q<capistrano-base_helper>, [">= 0.0.
|
54
|
+
s.add_dependency(%q<capistrano-base_helper>, [">= 0.0.6"])
|
54
55
|
s.add_dependency(%q<bundler>, [">= 1.3.0"])
|
55
56
|
s.add_dependency(%q<jeweler>, ["~> 1.8.6"])
|
56
57
|
end
|
57
58
|
else
|
58
59
|
s.add_dependency(%q<capistrano>, [">= 2.15.5"])
|
59
|
-
s.add_dependency(%q<capistrano-base_helper>, [">= 0.0.
|
60
|
+
s.add_dependency(%q<capistrano-base_helper>, [">= 0.0.6"])
|
60
61
|
s.add_dependency(%q<bundler>, [">= 1.3.0"])
|
61
62
|
s.add_dependency(%q<jeweler>, ["~> 1.8.6"])
|
62
63
|
end
|
@@ -29,8 +29,14 @@ Capistrano::Configuration.instance(true).load do
|
|
29
29
|
# The remote location of puma's config file. Used by runit when starting puma
|
30
30
|
_cset :puma_remote_config, File.join(shared_path, "config", "puma.rb")
|
31
31
|
|
32
|
+
# runit defaults
|
33
|
+
_cset :puma_restart_interval, defer {fetch(:runit_restart_interval)}
|
34
|
+
_cset :puma_restart_count, defer {fetch(:runit_restart_count)}
|
35
|
+
_cset :puma_autorestart_clear_interval, defer {fetch(:runit_autorestart_clear_interval)}
|
36
|
+
|
32
37
|
# runit paths
|
33
|
-
_cset :
|
38
|
+
_cset :puma_runit_local_run, File.join(File.expand_path(File.join(File.dirname(__FILE__),"../../../templates", "runit", )), "run.erb")
|
39
|
+
_cset :puma_runit_local_finish, File.join(File.expand_path(File.join(File.dirname(__FILE__),"../../../templates", "runit", )), "finish.erb")
|
34
40
|
_cset :puma_runit_control_q, File.join(File.expand_path(File.join(File.dirname(__FILE__),"../../../templates", "runit")), "control-q.erb")
|
35
41
|
_cset :puma_runit_local_log_run, File.join(File.expand_path(File.join(File.dirname(__FILE__),"../../../templates", "runit")), "log-run.erb")
|
36
42
|
|
@@ -22,7 +22,9 @@ Capistrano::Configuration.instance(true).load do
|
|
22
22
|
|
23
23
|
# Create runit config
|
24
24
|
Capistrano::RunitBase.create_service_dir(puma_runit_service_name)
|
25
|
-
Capistrano::BaseHelper::generate_and_upload_config(
|
25
|
+
Capistrano::BaseHelper::generate_and_upload_config(puma_runit_local_run, Capistrano::RunitBase.remote_run_config_path(puma_runit_service_name))
|
26
|
+
Capistrano::BaseHelper::generate_and_upload_config(puma_runit_local_finish, Capistrano::RunitBase.remote_finish_config_path(puma_runit_service_name))
|
27
|
+
|
26
28
|
#must use quit script for stop as well
|
27
29
|
Capistrano::BaseHelper::generate_and_upload_config(puma_runit_control_q, Capistrano::RunitBase.remote_control_path(puma_runit_service_name, "q"))
|
28
30
|
Capistrano::BaseHelper::generate_and_upload_config(puma_runit_control_q, Capistrano::RunitBase.remote_control_path(puma_runit_service_name, "s"))
|
@@ -8,6 +8,9 @@ state_path '<%= c.fetch(:puma_state_file) %>'
|
|
8
8
|
environment '<%= "#{Capistrano::BaseHelper.environment}" %>'
|
9
9
|
<%= "activate_control_app '#{c.fetch(:puma_control_url)}'" if c.fetch(:puma_activate_control_app) %>
|
10
10
|
|
11
|
+
# Must preload application in case there are errors, if not, infinite restarts will happen
|
12
|
+
preload_app!
|
13
|
+
|
11
14
|
# TODO - fix restart block!
|
12
15
|
# <%= "on_restart do" if c.fetch(:puma_on_restart_active) %>
|
13
16
|
# <%= " puts \"Restarting puma\"" if c.fetch(:puma_on_restart_active) %>
|
@@ -1,5 +1,8 @@
|
|
1
1
|
#!/bin/bash --login
|
2
|
+
<% c = Capistrano::BaseHelper.get_capistrano_instance %>
|
3
|
+
# Announcing stop/abort
|
4
|
+
echo "<%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:puma_runit_service_name)}" %> stopping..."
|
5
|
+
|
2
6
|
# The command used when puma is asked to quit/stop/exit, overridden here, as runit normal signal will not work with puma
|
3
|
-
<% c = Capistrano::BaseHelper::get_capistrano_instance %>
|
4
7
|
cd '<%= c.current_path %>'
|
5
8
|
RAILS_ENV=<%= Capistrano::BaseHelper.environment %> exec <%= c.fetch(:puma_control) %> -S <%= c.fetch(:puma_state_file) %> stop
|
@@ -0,0 +1,135 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#
|
3
|
+
# This finish file is originally from:
|
4
|
+
# https://github.com/erwbgy/puppet-runit/blob/fde6006e6d400f0c99b6ff0b1b63094207dc8783/templates/service/finish.erb
|
5
|
+
# Thanks to erwbgy!
|
6
|
+
#
|
7
|
+
# <% c = Capistrano::BaseHelper.get_capistrano_instance %>
|
8
|
+
# Variable name setup
|
9
|
+
<%
|
10
|
+
exit_code = "EXIT_CODE_#{Capistrano::BaseHelper.user_app_env_underscore_short}_#{c.fetch(:puma_runit_service_name)}".upcase
|
11
|
+
exit_status = "EXIT_STATUS_#{Capistrano::BaseHelper.user_app_env_underscore_short}_#{c.fetch(:puma_runit_service_name)}".upcase
|
12
|
+
min_auto_restart_interval = "MIN_AUTO_RESTART_INTERVAL_#{Capistrano::BaseHelper.user_app_env_underscore_short}_#{c.fetch(:puma_runit_service_name)}".upcase
|
13
|
+
max_auto_restart_count = "MAX_AUTO_RESTART_COUNT_#{Capistrano::BaseHelper.user_app_env_underscore_short}_#{c.fetch(:puma_runit_service_name)}".upcase
|
14
|
+
auto_restart_count_clear_interval = "AUTO_RESTART_COUNT_CLEAR_INTERVAL_#{Capistrano::BaseHelper.user_app_env_underscore_short}_#{c.fetch(:puma_runit_service_name)}".upcase
|
15
|
+
%>
|
16
|
+
#
|
17
|
+
# The following variables are set by Runit:
|
18
|
+
#
|
19
|
+
# <%= "#{exit_code}" %>: ./run's exit code
|
20
|
+
#
|
21
|
+
# <%= "#{exit_status}" %>: The least significant byte of the exit status as determined by
|
22
|
+
# waitpid(2); for instance it is 0 if ./run exited normally, and the signal
|
23
|
+
# number if ./run was terminated by a signal.
|
24
|
+
#
|
25
|
+
# The following configuration variables must be set:
|
26
|
+
#
|
27
|
+
# <%= "#{min_auto_restart_interval}" %>: The minimum delay (in seconds) between automatic restarts
|
28
|
+
#
|
29
|
+
# <%= "#{max_auto_restart_count}" %>: The maximum number of automatic restarts allowed
|
30
|
+
#
|
31
|
+
# <%= "#{auto_restart_count_clear_interval}" %>: Reset the restart count if
|
32
|
+
# <%= "#{auto_restart_count_clear_interval}" %> seconds have elapsed since the last
|
33
|
+
# automatic restart.
|
34
|
+
#
|
35
|
+
# Creates two new files in the service directory:
|
36
|
+
#
|
37
|
+
# last_finish - the Unix time (seconds since 1970) when the ./finish script
|
38
|
+
# last ran
|
39
|
+
#
|
40
|
+
# restart_count - the number of automatic restarts that have taken place
|
41
|
+
#
|
42
|
+
# These files must be removed BEFORE the service is cleanly shut down.
|
43
|
+
|
44
|
+
### Configuration
|
45
|
+
|
46
|
+
# ./run's exit code
|
47
|
+
<%= "#{exit_code}" %>=$1
|
48
|
+
|
49
|
+
# The least significant byte of the exit status as determined by waitpid(2);
|
50
|
+
# for instance it is 0 if ./run exited normally, and the signal number if
|
51
|
+
# ./run was terminated by a signal.
|
52
|
+
<%= "#{exit_status}" %>=$2
|
53
|
+
|
54
|
+
# The minimum delay (in seconds) between automatic restarts
|
55
|
+
<%= "#{min_auto_restart_interval}" %>=<%= c.fetch(:puma_restart_interval) %>
|
56
|
+
|
57
|
+
# The maximum number of automatic restarts allowed
|
58
|
+
<%= "#{max_auto_restart_count}" %>=<%= c.fetch(:puma_restart_count) %>
|
59
|
+
|
60
|
+
# Reset the restart count if <%= "#{auto_restart_count_clear_interval}" %> seconds
|
61
|
+
# have elapsed since the last automatic restart.
|
62
|
+
<%= "#{auto_restart_count_clear_interval}" %>=<%= c.fetch(:puma_autorestart_clear_interval) %>
|
63
|
+
|
64
|
+
export <%= "#{exit_code}" %>
|
65
|
+
export <%= "#{exit_status}" %>
|
66
|
+
export <%= "#{min_auto_restart_interval}" %>
|
67
|
+
export <%= "#{max_auto_restart_count}" %>
|
68
|
+
export <%= "#{auto_restart_count_clear_interval }" %>
|
69
|
+
|
70
|
+
### Normally no changes should be made after this point
|
71
|
+
|
72
|
+
echo "<%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:puma_runit_service_name)}" %> finish; exit code: $<%= "#{exit_code}" %>; exit status: $<%= "#{exit_status}" %>"
|
73
|
+
|
74
|
+
if test $<%= "#{exit_code}" %> -eq 0 -a $<%= "#{exit_status}" %> -eq 0
|
75
|
+
then
|
76
|
+
echo "Clean shutdown."
|
77
|
+
sv down .
|
78
|
+
exit 0
|
79
|
+
fi
|
80
|
+
|
81
|
+
NOW=$(date +%s)
|
82
|
+
|
83
|
+
# Determine when the finish script last ran
|
84
|
+
if test -r last_finish
|
85
|
+
then
|
86
|
+
LAST_FINISH=$(head -1 last_finish)
|
87
|
+
INTERVAL=$(expr $NOW - $LAST_FINISH)
|
88
|
+
fi
|
89
|
+
echo $NOW > last_finish
|
90
|
+
|
91
|
+
# Remove the restart_count file if <%= "#{auto_restart_count_clear_interval}" %> seconds
|
92
|
+
# have elapsed since the last automatic restart.
|
93
|
+
if test $INTERVAL -gt $<%= "#{auto_restart_count_clear_interval}" %>
|
94
|
+
then
|
95
|
+
echo "NOTICE: <%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:puma_runit_service_name)}" %>"
|
96
|
+
echo "The last automatic restart was $INTERVAL seconds ago."
|
97
|
+
echo "Since this is greater than $<%= "#{auto_restart_count_clear_interval}" %> the restart count is being reset."
|
98
|
+
rm -f restart_count
|
99
|
+
fi
|
100
|
+
|
101
|
+
# Determine how many automatic restarts we have had
|
102
|
+
# and then increment this value by one
|
103
|
+
if test -r restart_count
|
104
|
+
then
|
105
|
+
RESTART_COUNT=$(head -1 restart_count)
|
106
|
+
RESTART_COUNT=$(expr $RESTART_COUNT + 1)
|
107
|
+
else
|
108
|
+
RESTART_COUNT=1
|
109
|
+
fi
|
110
|
+
echo $RESTART_COUNT > restart_count
|
111
|
+
|
112
|
+
# Check that we have not exceeded the maximum number of automatic restarts
|
113
|
+
if test $RESTART_COUNT -gt $<%= "#{max_auto_restart_count}" %>
|
114
|
+
then
|
115
|
+
echo "WARNING: <%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:puma_runit_service_name)}" %>"
|
116
|
+
echo "Reached the limit of $<%= "#{max_auto_restart_count}" %> automatic restarts."
|
117
|
+
echo "The last automatic restart was within $<%= "#{auto_restart_count_clear_interval}" %> seconds."
|
118
|
+
echo "Manual intervention required. No further automatic restarts will be attempted."
|
119
|
+
sv down .
|
120
|
+
exit 0
|
121
|
+
fi
|
122
|
+
|
123
|
+
if test -n "$INTERVAL"
|
124
|
+
then
|
125
|
+
SLEEP_TIME=$(expr $<%= "#{min_auto_restart_interval}" %> - $INTERVAL)
|
126
|
+
if test $SLEEP_TIME -gt 0
|
127
|
+
then
|
128
|
+
echo "NOTICE: Restart attempt $RESTART_COUNT for <%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:puma_runit_service_name)}" %>"
|
129
|
+
echo "$INTERVAL seconds have elapsed since the last automatic restart."
|
130
|
+
echo "Sleeping for $SLEEP_TIME seconds before the next automatic restart ..."
|
131
|
+
sleep $SLEEP_TIME
|
132
|
+
fi
|
133
|
+
fi
|
134
|
+
|
135
|
+
exit 0
|
data/templates/runit/run.erb
CHANGED
@@ -1,9 +1,18 @@
|
|
1
1
|
#!/bin/bash --login
|
2
2
|
# Start puma service
|
3
|
-
<% c = Capistrano::BaseHelper
|
3
|
+
# <% c = Capistrano::BaseHelper.get_capistrano_instance %>
|
4
|
+
|
5
|
+
# Redirect stderr so everything ends up in the log file
|
6
|
+
exec 2>&1
|
7
|
+
|
8
|
+
# Announce start
|
9
|
+
echo "<%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:puma_runit_service_name)}" %> starting..."
|
10
|
+
|
4
11
|
# remove pumactl.sock and puma.sock if existing, as puma doesn't overwrite and files may be
|
5
12
|
# existing after server crash or if puma wasnt shutdown properly.
|
6
13
|
rm -f "<%= c.fetch(:puma_socket_file) %>"
|
7
14
|
rm -f "<%= c.fetch(:puma_control_file) %>"
|
8
15
|
cd '<%= c.current_path %>'
|
16
|
+
|
17
|
+
# Start puma
|
9
18
|
RAILS_ENV=<%= Capistrano::BaseHelper.environment %> exec <%= c.fetch(:puma_bin) %> -C <%= c.fetch(:puma_remote_config) %>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-pumaio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-07-
|
12
|
+
date: 2013-07-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.0.
|
37
|
+
version: 0.0.6
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.0.
|
45
|
+
version: 0.0.6
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: bundler
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- templates/monit/puma.conf.erb
|
98
98
|
- templates/runit/config.rb.erb
|
99
99
|
- templates/runit/control-q.erb
|
100
|
+
- templates/runit/finish.erb
|
100
101
|
- templates/runit/log-run.erb
|
101
102
|
- templates/runit/run.erb
|
102
103
|
homepage: https://github.com/leifcr/capistrano-puma
|
@@ -114,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
115
|
version: '0'
|
115
116
|
segments:
|
116
117
|
- 0
|
117
|
-
hash:
|
118
|
+
hash: -4210930793118983837
|
118
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
120
|
none: false
|
120
121
|
requirements:
|