capistrano-pumaio 0.0.4 → 0.0.5

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.
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  gem "capistrano", ">= 2.15.5"
4
- gem 'capistrano-base_helper', ">= 0.0.5"
4
+ gem 'capistrano-base_helper', ">= 0.0.6"
5
5
 
6
6
  group :development do
7
7
  gem "bundler", ">= 1.3.0"
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.5)
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.5)
68
+ capistrano-base_helper (>= 0.0.6)
69
69
  jeweler (~> 1.8.6)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "capistrano-pumaio"
8
- s.version = "0.0.4"
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-05"
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.5"])
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.5"])
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.5"])
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 :puma_runit_local_config, File.join(File.expand_path(File.join(File.dirname(__FILE__),"../../../templates", "runit", )), "run.erb")
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(puma_runit_local_config, Capistrano::RunitBase.remote_run_config_path(puma_runit_service_name))
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
@@ -1,9 +1,18 @@
1
1
  #!/bin/bash --login
2
2
  # Start puma service
3
- <% c = Capistrano::BaseHelper::get_capistrano_instance %>
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
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-05 00:00:00.000000000 Z
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.5
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.5
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: 1442300623838842205
118
+ hash: -4210930793118983837
118
119
  required_rubygems_version: !ruby/object:Gem::Requirement
119
120
  none: false
120
121
  requirements: