capistrano3-puma 6.0.0.alpha.2 → 6.0.0.alpha.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +7 -88
- data/lib/capistrano/puma/systemd.rb +5 -5
- data/lib/capistrano/puma.rb +15 -6
- data/lib/capistrano/tasks/systemd.rake +1 -0
- data/lib/capistrano/templates/puma.service.erb +9 -9
- metadata +2 -8
- data/lib/capistrano/puma/monit.rb +0 -34
- data/lib/capistrano/puma/version.rb +0 -5
- data/lib/capistrano/tasks/monit.rake +0 -61
- data/lib/capistrano/templates/puma-deb.erb +0 -421
- data/lib/capistrano/templates/puma-rpm.erb +0 -328
- data/lib/capistrano/templates/puma_monit.conf.erb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79f84230c8bfdb69838a9dfb396c3c4da8a8c305623cd0268700bc795ba3443a
|
4
|
+
data.tar.gz: d2510f7171eff0dbbd36c93d41df5e84ae7d38408983a6191f7e7e3ebd365ad0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a2333e58059467a64307f0c68811825c2addc090293ce97b26e9e3f7b943c5fbb02c4dbd8b4096b1bbd17527a5b692adc286acacc48f3a795a73ad0387d4ed9
|
7
|
+
data.tar.gz: c92d7c85cb8aa0c735fc80cb697ed5eadad359158f259aeb708f6427225b7fa0d209bd99b79d7860346bb472d3fda35516a4aae73411421155818bbc161c2207
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
[Unreleased](https://github.com/seuros/capistrano-puma/compare/v5.2.0...master)
|
4
|
+
- Removed support for support for monit and upstart. (will add them back if someone is willing to maintain them)
|
5
|
+
- Sync configuration with capistrano-sidekiq
|
6
|
+
- Support for notify systemd service. Add sd_notify gem to your Gemfile.
|
7
|
+
- Add example application for easier testing.
|
8
|
+
- Deprecate Nginx support. (configuration tools should be preferred over capistrano tasks)
|
9
|
+
|
3
10
|
## [5.2.0](https://github.com/seuros/capistrano-puma/tree/5.2.0) (2021-09-11)
|
4
11
|
|
5
12
|
[Full Changelog](https://github.com/seuros/capistrano-puma/compare/v5.1.1...5.2.0)
|
data/README.md
CHANGED
@@ -22,17 +22,13 @@ And then execute:
|
|
22
22
|
require 'capistrano/puma'
|
23
23
|
install_plugin Capistrano::Puma # Default puma tasks
|
24
24
|
install_plugin Capistrano::Puma::Systemd
|
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
25
|
```
|
28
26
|
|
29
27
|
To prevent loading the hooks of the plugin, add false to the load_hooks param.
|
30
28
|
```ruby
|
31
29
|
# Capfile
|
32
30
|
|
33
|
-
require 'capistrano/puma'
|
34
31
|
install_plugin Capistrano::Puma, load_hooks: false # Default puma tasks without hooks
|
35
|
-
install_plugin Capistrano::Puma::Monit, load_hooks: false # Monit tasks without hooks
|
36
32
|
```
|
37
33
|
|
38
34
|
To make it work with rvm, rbenv and chruby, install the plugin after corresponding library inclusion.
|
@@ -48,61 +44,14 @@ To make it work with rvm, rbenv and chruby, install the plugin after correspondi
|
|
48
44
|
|
49
45
|
To list available tasks use `cap -T`
|
50
46
|
|
51
|
-
To upload puma config use:
|
52
|
-
```ruby
|
53
|
-
cap production puma:config
|
54
|
-
```
|
55
|
-
By default the file located in `shared/puma.rb`
|
56
|
-
|
57
47
|
|
58
48
|
Ensure that `tmp/pids` and ` tmp/sockets log` are shared (via `linked_dirs`):
|
59
49
|
|
60
50
|
`This step is mandatory before deploying, otherwise puma server won't start`
|
61
51
|
|
62
|
-
|
63
|
-
|
64
|
-
To upload a nginx site config (eg. /etc/nginx/sites-enabled/) use:
|
65
|
-
```ruby
|
66
|
-
cap production puma:nginx_config
|
67
|
-
```
|
52
|
+
## Example
|
68
53
|
|
69
|
-
|
70
|
-
```
|
71
|
-
rails g capistrano:nginx_puma:config
|
72
|
-
```
|
73
|
-
|
74
|
-
if your nginx server configuration is not located in `/etc/nginx`, you may need to customize:
|
75
|
-
```ruby
|
76
|
-
set :nginx_sites_available_path, "/etc/nginx/sites-available"
|
77
|
-
set :nginx_sites_enabled_path, "/etc/nginx/sites-enabled"
|
78
|
-
```
|
79
|
-
|
80
|
-
By default, `nginx_config` will be executed with `:web` role. But you can assign it to a different role:
|
81
|
-
```ruby
|
82
|
-
set :puma_nginx, :foo
|
83
|
-
```
|
84
|
-
or define a standalone one:
|
85
|
-
```ruby
|
86
|
-
role :puma_nginx, %w{root@example.com}
|
87
|
-
```
|
88
|
-
|
89
|
-
To use customize environment variables
|
90
|
-
|
91
|
-
```ruby
|
92
|
-
set :puma_service_unit_env_file, '/etc/environment'
|
93
|
-
```
|
94
|
-
```ruby
|
95
|
-
set :puma_service_unit_env_vars, %w[
|
96
|
-
RAILS_ENV=development
|
97
|
-
PUMA_METRICS_HTTP=tcp://0.0.0.0:9393
|
98
|
-
]
|
99
|
-
```
|
100
|
-
|
101
|
-
To use [phased restart](https://github.com/puma/puma/blob/master/docs/restart.md) for zero downtime deployments:
|
102
|
-
|
103
|
-
```ruby
|
104
|
-
set :puma_phased_restart, true
|
105
|
-
```
|
54
|
+
A sample application is provided to show how to use this gem at https://github.com/seuros/capistrano-example-app
|
106
55
|
|
107
56
|
### Systemd Socket Activation
|
108
57
|
|
@@ -120,48 +69,15 @@ cap puma:systemd:restart_socket
|
|
120
69
|
```
|
121
70
|
This would also restart the puma instance as the puma service depends on the socket service being active
|
122
71
|
|
123
|
-
### Multi bind
|
124
|
-
|
125
|
-
Multi-bind can be set with an array in the puma_bind variable
|
126
|
-
```ruby
|
127
|
-
set :puma_bind, %w(tcp://0.0.0.0:9292 unix:///tmp/puma.sock)
|
128
|
-
```
|
129
|
-
* Listening on tcp://0.0.0.0:9292
|
130
|
-
* Listening on unix:///tmp/puma.sock
|
131
|
-
|
132
|
-
### Active Record
|
133
|
-
|
134
|
-
For ActiveRecord the following line to your deploy.rb
|
135
|
-
```ruby
|
136
|
-
set :puma_init_active_record, true
|
137
|
-
```
|
138
|
-
|
139
72
|
### Other configs
|
140
73
|
|
141
74
|
Configurable options, shown here with defaults: Please note the configuration options below are not required unless you are trying to override a default setting, for instance if you are deploying on a host on which you do not have sudo or root privileges and you need to restrict the path. These settings go in the deploy.rb file.
|
142
75
|
|
143
76
|
```ruby
|
144
77
|
set :puma_user, fetch(:user)
|
145
|
-
set :puma_role, :
|
146
|
-
set :
|
147
|
-
set :puma_systemctl_user, :system # accepts :user
|
148
|
-
set :puma_enable_lingering, fetch(:puma_systemctl_user) != :system # https://wiki.archlinux.org/index.php/systemd/User#Automatic_start-up_of_systemd_user_instances
|
149
|
-
set :puma_lingering_user, fetch(:user)
|
150
|
-
set :puma_service_unit_env_file, nil
|
78
|
+
set :puma_role, :web
|
79
|
+
set :puma_service_unit_env_files, []
|
151
80
|
set :puma_service_unit_env_vars, []
|
152
|
-
|
153
|
-
set :nginx_config_name, "#{fetch(:application)}_#{fetch(:stage)}"
|
154
|
-
set :nginx_flags, 'fail_timeout=0'
|
155
|
-
set :nginx_http_flags, fetch(:nginx_flags)
|
156
|
-
set :nginx_server_name, "localhost #{fetch(:application)}.local"
|
157
|
-
set :nginx_sites_available_path, '/etc/nginx/sites-available'
|
158
|
-
set :nginx_sites_enabled_path, '/etc/nginx/sites-enabled'
|
159
|
-
set :nginx_socket_flags, fetch(:nginx_flags)
|
160
|
-
set :nginx_ssl_certificate, "/etc/ssl/certs/#{fetch(:nginx_config_name)}.crt"
|
161
|
-
set :nginx_ssl_certificate_key, "/etc/ssl/private/#{fetch(:nginx_config_name)}.key"
|
162
|
-
set :nginx_use_ssl, false
|
163
|
-
set :nginx_use_http2, true
|
164
|
-
set :nginx_downstream_uses_ssl, false
|
165
81
|
```
|
166
82
|
|
167
83
|
__Notes:__ If you are setting values for variables that might be used by other plugins, use `append` instead of `set`. For example:
|
@@ -169,6 +85,9 @@ __Notes:__ If you are setting values for variables that might be used by other p
|
|
169
85
|
append :rbenv_map_bins, 'puma', 'pumactl'
|
170
86
|
```
|
171
87
|
|
88
|
+
# Nginx documentation
|
89
|
+
Nginx documentation was moved to [nginx.md](docs/nginx.md)
|
90
|
+
|
172
91
|
## Contributing
|
173
92
|
|
174
93
|
1. Fork it
|
@@ -12,15 +12,15 @@ module Capistrano
|
|
12
12
|
|
13
13
|
def set_defaults
|
14
14
|
set_if_empty :puma_systemctl_bin, -> { fetch(:systemctl_bin, '/bin/systemctl') }
|
15
|
-
set_if_empty :puma_service_unit_name, -> { "
|
16
|
-
set_if_empty :puma_enable_socket_service,
|
17
|
-
|
15
|
+
set_if_empty :puma_service_unit_name, -> { "#{fetch(:application)}_puma_#{fetch(:stage)}" }
|
16
|
+
set_if_empty :puma_enable_socket_service, false
|
17
|
+
|
18
|
+
set_if_empty :puma_service_unit_env_files, -> { fetch(:service_unit_env_files, []) }
|
19
|
+
set_if_empty :puma_service_unit_env_vars, -> { fetch(:service_unit_env_vars, []) }
|
18
20
|
|
19
21
|
set_if_empty :puma_systemctl_user, -> { fetch(:systemctl_user, :user) }
|
20
22
|
set_if_empty :puma_enable_lingering, -> { fetch(:puma_systemctl_user) != :system }
|
21
23
|
set_if_empty :puma_lingering_user, -> { fetch(:lingering_user, fetch(:user)) }
|
22
|
-
set_if_empty :puma_access_log, -> { File.join(shared_path, 'log', "#{fetch(:puma_env)}.log") }
|
23
|
-
set_if_empty :puma_error_log, -> { File.join(shared_path, 'log', "#{fetch(:puma_env)}.log") }
|
24
24
|
|
25
25
|
set_if_empty :puma_service_templates_path, fetch(:service_templates_path, 'config/deploy/templates')
|
26
26
|
end
|
data/lib/capistrano/puma.rb
CHANGED
@@ -28,6 +28,15 @@ module Capistrano
|
|
28
28
|
end.join("\n")
|
29
29
|
end
|
30
30
|
|
31
|
+
def service_unit_type
|
32
|
+
## Jruby don't support notify
|
33
|
+
return "simple" if RUBY_ENGINE == "jruby"
|
34
|
+
fetch(:puma_service_unit_type,
|
35
|
+
## Check if sd_notify is available in the bundle
|
36
|
+
Gem::Specification.find_all_by_name("sd_notify").any? ? "notify" : "simple")
|
37
|
+
|
38
|
+
end
|
39
|
+
|
31
40
|
def compiled_template_puma(from, role)
|
32
41
|
@role = role
|
33
42
|
file = [
|
@@ -95,13 +104,15 @@ module Capistrano
|
|
95
104
|
include PumaCommon
|
96
105
|
|
97
106
|
def set_defaults
|
98
|
-
set_if_empty :puma_role, :
|
107
|
+
set_if_empty :puma_role, :web
|
99
108
|
set_if_empty :puma_env, -> { fetch(:rack_env, fetch(:rails_env, fetch(:stage))) }
|
109
|
+
set_if_empty :puma_access_log, -> { File.join(shared_path, 'log', "puma.log") }
|
110
|
+
set_if_empty :puma_error_log, -> { File.join(shared_path, 'log', "puma.log") }
|
100
111
|
|
101
112
|
# Chruby, Rbenv and RVM integration
|
102
|
-
append :chruby_map_bins, 'puma', 'pumactl'
|
103
|
-
append :rbenv_map_bins, 'puma', 'pumactl'
|
104
|
-
append :rvm_map_bins, 'puma', 'pumactl'
|
113
|
+
append :chruby_map_bins, 'puma', 'pumactl' if fetch(:chruby_map_bins)
|
114
|
+
append :rbenv_map_bins, 'puma', 'pumactl' if fetch(:rbenv_map_bins)
|
115
|
+
append :rvm_map_bins, 'puma', 'pumactl' if fetch(:rvm_map_bins)
|
105
116
|
|
106
117
|
# Bundler integration
|
107
118
|
append :bundle_bins, 'puma', 'pumactl'
|
@@ -110,5 +121,3 @@ module Capistrano
|
|
110
121
|
end
|
111
122
|
|
112
123
|
require 'capistrano/puma/systemd'
|
113
|
-
require 'capistrano/puma/monit'
|
114
|
-
require 'capistrano/puma/nginx'
|
@@ -15,19 +15,19 @@ Description=Puma HTTP Server for <%= "#{fetch(:application)} (#{fetch(:stage)})"
|
|
15
15
|
After=syslog.target network.target
|
16
16
|
|
17
17
|
[Service]
|
18
|
-
Type
|
18
|
+
Type=<%= service_unit_type %>
|
19
19
|
WatchdogSec=10
|
20
|
-
<%="User=#{puma_user(@role)}" if fetch(:puma_systemctl_user) == :system
|
20
|
+
<%="User=#{puma_user(@role)}" if fetch(:puma_systemctl_user) == :system %>
|
21
21
|
WorkingDirectory=<%= current_path %>
|
22
|
-
|
23
|
-
# See https://github.com/rubygems/rubygems/issues/3254
|
24
|
-
ExecStart=<%= expanded_bundle_command %> exec --keep-file-descriptors puma
|
22
|
+
ExecStart=<%= expanded_bundle_command %> exec puma -e <%= fetch(:puma_env) %>
|
25
23
|
ExecReload=/bin/kill -USR1 $MAINPID
|
24
|
+
<%- Array(fetch(:puma_service_unit_env_files)).each do |file| %>
|
25
|
+
<%="EnvironmentFile=#{file}" -%>
|
26
|
+
<% end -%>
|
27
|
+
<% Array(fetch(:puma_service_unit_env_vars)).each do |environment_variable| %>
|
28
|
+
<%="Environment=\"#{environment_variable}\"" -%>
|
29
|
+
<% end -%>
|
26
30
|
|
27
|
-
<%="EnvironmentFile=#{fetch(:puma_service_unit_env_file)}" if fetch(:puma_service_unit_env_file) %>
|
28
|
-
<% fetch(:puma_service_unit_env_vars, []).each do |environment_variable| %>
|
29
|
-
<%="Environment=#{environment_variable}" %>
|
30
|
-
<% end %>
|
31
31
|
# if we crash, restart
|
32
32
|
RestartSec=1
|
33
33
|
Restart=on-failure
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano3-puma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.0.alpha.
|
4
|
+
version: 6.0.0.alpha.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Abdelkader Boudih
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -69,19 +69,13 @@ files:
|
|
69
69
|
- LICENSE.txt
|
70
70
|
- README.md
|
71
71
|
- lib/capistrano/puma.rb
|
72
|
-
- lib/capistrano/puma/monit.rb
|
73
72
|
- lib/capistrano/puma/nginx.rb
|
74
73
|
- lib/capistrano/puma/systemd.rb
|
75
|
-
- lib/capistrano/puma/version.rb
|
76
|
-
- lib/capistrano/tasks/monit.rake
|
77
74
|
- lib/capistrano/tasks/nginx.rake
|
78
75
|
- lib/capistrano/tasks/systemd.rake
|
79
76
|
- lib/capistrano/templates/nginx_conf.erb
|
80
|
-
- lib/capistrano/templates/puma-deb.erb
|
81
|
-
- lib/capistrano/templates/puma-rpm.erb
|
82
77
|
- lib/capistrano/templates/puma.service.erb
|
83
78
|
- lib/capistrano/templates/puma.socket.erb
|
84
|
-
- lib/capistrano/templates/puma_monit.conf.erb
|
85
79
|
- lib/capistrano3-puma.rb
|
86
80
|
- lib/generators/capistrano/nginx_puma/USAGE
|
87
81
|
- lib/generators/capistrano/nginx_puma/config_generator.rb
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module Capistrano
|
2
|
-
class Puma::Monit < Capistrano::Plugin
|
3
|
-
include PumaCommon
|
4
|
-
def register_hooks
|
5
|
-
before 'deploy:updating', 'puma:monit:unmonitor'
|
6
|
-
after 'deploy:published', 'puma:monit:monitor'
|
7
|
-
end
|
8
|
-
|
9
|
-
def define_tasks
|
10
|
-
eval_rakefile File.expand_path('../../tasks/monit.rake', __FILE__)
|
11
|
-
end
|
12
|
-
|
13
|
-
def set_defaults
|
14
|
-
set_if_empty :puma_monit_conf_dir, -> { "/etc/monit/conf.d/#{puma_monit_service_name}.conf" }
|
15
|
-
set_if_empty :puma_monit_use_sudo, true
|
16
|
-
set_if_empty :puma_monit_bin, '/usr/bin/monit'
|
17
|
-
end
|
18
|
-
|
19
|
-
def puma_monit_service_name
|
20
|
-
fetch(:puma_monit_service_name, "puma_#{fetch(:application)}_#{fetch(:stage)}")
|
21
|
-
end
|
22
|
-
|
23
|
-
def sudo_if_needed(command)
|
24
|
-
if fetch(:puma_monit_use_sudo)
|
25
|
-
backend.sudo command
|
26
|
-
else
|
27
|
-
puma_role = fetch(:puma_role)
|
28
|
-
backend.on(puma_role) do
|
29
|
-
backend.execute command
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
git_plugin = self
|
2
|
-
|
3
|
-
namespace :puma do
|
4
|
-
namespace :monit do
|
5
|
-
desc 'Config Puma monit-service'
|
6
|
-
task :config do
|
7
|
-
on roles(fetch(:puma_role)) do |role|
|
8
|
-
git_plugin.template_puma 'puma_monit.conf', "#{fetch(:tmp_dir)}/monit.conf", role
|
9
|
-
git_plugin.sudo_if_needed "mv #{fetch(:tmp_dir)}/monit.conf #{fetch(:puma_monit_conf_dir)}"
|
10
|
-
git_plugin.sudo_if_needed "#{fetch(:puma_monit_bin)} reload"
|
11
|
-
# Wait for Monit to be reloaded
|
12
|
-
sleep 1
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
desc 'Monitor Puma monit-service'
|
17
|
-
task :monitor do
|
18
|
-
on roles(fetch(:puma_role)) do
|
19
|
-
begin
|
20
|
-
git_plugin.sudo_if_needed "#{fetch(:puma_monit_bin)} monitor #{git_plugin.puma_monit_service_name}"
|
21
|
-
rescue
|
22
|
-
invoke 'puma:monit:config'
|
23
|
-
git_plugin.sudo_if_needed "#{fetch(:puma_monit_bin)} monitor #{git_plugin.puma_monit_service_name}"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
desc 'Unmonitor Puma monit-service'
|
29
|
-
task :unmonitor do
|
30
|
-
on roles(fetch(:puma_role)) do
|
31
|
-
begin
|
32
|
-
git_plugin.sudo_if_needed "#{fetch(:puma_monit_bin)} unmonitor #{git_plugin.puma_monit_service_name}"
|
33
|
-
rescue
|
34
|
-
# no worries here (still no monitoring)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
desc 'Start Puma monit-service'
|
40
|
-
task :start do
|
41
|
-
on roles(fetch(:puma_role)) do
|
42
|
-
git_plugin.sudo_if_needed "#{fetch(:puma_monit_bin)} start #{git_plugin.puma_monit_service_name}"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
desc 'Stop Puma monit-service'
|
47
|
-
task :stop do
|
48
|
-
on roles(fetch(:puma_role)) do
|
49
|
-
git_plugin.sudo_if_needed "#{fetch(:puma_monit_bin)} stop #{git_plugin.puma_monit_service_name}"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
desc 'Restart Puma monit-service'
|
54
|
-
task :restart do
|
55
|
-
on roles(fetch(:puma_role)) do
|
56
|
-
git_plugin.sudo_if_needed "#{fetch(:puma_monit_bin)} restart #{git_plugin.puma_monit_service_name}"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
end
|
@@ -1,421 +0,0 @@
|
|
1
|
-
#! /bin/sh
|
2
|
-
### BEGIN INIT INFO
|
3
|
-
# Provides: puma
|
4
|
-
# Required-Start: $remote_fs $syslog
|
5
|
-
# Required-Stop: $remote_fs $syslog
|
6
|
-
# Default-Start: 2 3 4 5
|
7
|
-
# Default-Stop: 0 1 6
|
8
|
-
# Short-Description: Puma web server
|
9
|
-
# Description: A ruby web server built for concurrency http://puma.io
|
10
|
-
# initscript to be placed in /etc/init.d.
|
11
|
-
### END INIT INFO
|
12
|
-
|
13
|
-
# Author: Darío Javier Cravero <dario@exordo.com>
|
14
|
-
#
|
15
|
-
# Do NOT "set -e"
|
16
|
-
|
17
|
-
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
18
|
-
PATH=/usr/local/bin:/usr/local/sbin/:/sbin:/usr/sbin:/bin:/usr/bin
|
19
|
-
DESC="Puma rack web server"
|
20
|
-
NAME=puma
|
21
|
-
DAEMON=$NAME
|
22
|
-
SCRIPTNAME=/etc/init.d/$NAME
|
23
|
-
CONFIG=<%=fetch(:puma_jungle_conf)%>
|
24
|
-
JUNGLE=`cat $CONFIG`
|
25
|
-
RUNPUMA=<%=fetch(:puma_run_path)%>
|
26
|
-
USE_LOCAL_BUNDLE=0
|
27
|
-
|
28
|
-
# Load the VERBOSE setting and other rcS variables
|
29
|
-
. /lib/init/vars.sh
|
30
|
-
|
31
|
-
# Define LSB log_* functions.
|
32
|
-
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
33
|
-
. /lib/lsb/init-functions
|
34
|
-
|
35
|
-
#
|
36
|
-
# Function that starts the jungle
|
37
|
-
#
|
38
|
-
do_start() {
|
39
|
-
log_daemon_msg "=> Running the jungle..."
|
40
|
-
for i in $JUNGLE; do
|
41
|
-
dir=`echo $i | cut -d , -f 1`
|
42
|
-
do_start_one $dir
|
43
|
-
done
|
44
|
-
}
|
45
|
-
|
46
|
-
do_start_one() {
|
47
|
-
PIDFILE=$1/tmp/pids/puma.pid
|
48
|
-
if [ -e $PIDFILE ]; then
|
49
|
-
PID=`cat $PIDFILE`
|
50
|
-
# If the puma isn't running, run it, otherwise restart it.
|
51
|
-
if [ "`ps -A -o pid= | grep -c $PID`" -eq 0 ]; then
|
52
|
-
do_start_one_do $1
|
53
|
-
else
|
54
|
-
do_restart_one $1
|
55
|
-
fi
|
56
|
-
else
|
57
|
-
do_start_one_do $1
|
58
|
-
fi
|
59
|
-
}
|
60
|
-
|
61
|
-
do_start_one_do() {
|
62
|
-
i=`grep $1 $CONFIG`
|
63
|
-
dir=`echo $i | cut -d , -f 1`
|
64
|
-
user=`echo $i | cut -d , -f 2`
|
65
|
-
config_file=`echo $i | cut -d , -f 3`
|
66
|
-
if [ "$config_file" = "" ]; then
|
67
|
-
config_file="$dir/config/puma.rb"
|
68
|
-
fi
|
69
|
-
log_file=`echo $i | cut -d , -f 4`
|
70
|
-
if [ "$log_file" = "" ]; then
|
71
|
-
log_file="$dir/log/puma.log"
|
72
|
-
fi
|
73
|
-
environment=`echo $i | cut -d , -f 5`
|
74
|
-
|
75
|
-
log_daemon_msg "--> Woke up puma $dir"
|
76
|
-
log_daemon_msg "user $user"
|
77
|
-
log_daemon_msg "log to $log_file"
|
78
|
-
|
79
|
-
if [ ! -z "$environment" ]; then
|
80
|
-
for e in $(echo "$environment" | tr ';' '\n'); do
|
81
|
-
log_daemon_msg "environment $e"
|
82
|
-
v=${e%%\=*} ; eval "$e" ; export $v
|
83
|
-
done
|
84
|
-
fi
|
85
|
-
|
86
|
-
start-stop-daemon --verbose --start --chdir $dir --chuid $user --background --exec $RUNPUMA -- $dir $config_file $log_file
|
87
|
-
}
|
88
|
-
|
89
|
-
#
|
90
|
-
# Function that stops the jungle
|
91
|
-
#
|
92
|
-
do_stop() {
|
93
|
-
log_daemon_msg "=> Putting all the beasts to bed..."
|
94
|
-
for i in $JUNGLE; do
|
95
|
-
dir=`echo $i | cut -d , -f 1`
|
96
|
-
do_stop_one $dir
|
97
|
-
done
|
98
|
-
}
|
99
|
-
#
|
100
|
-
# Function that stops the daemon/service
|
101
|
-
#
|
102
|
-
do_stop_one() {
|
103
|
-
log_daemon_msg "--> Stopping $1"
|
104
|
-
PIDFILE=$1/tmp/pids/puma.pid
|
105
|
-
STATEFILE=$1/tmp/pids/puma.state
|
106
|
-
if [ -e $PIDFILE ]; then
|
107
|
-
PID=`cat $PIDFILE`
|
108
|
-
if [ "`ps -A -o pid= | grep -c $PID`" -eq 0 ]; then
|
109
|
-
log_daemon_msg "---> Puma $1 isn't running."
|
110
|
-
else
|
111
|
-
log_daemon_msg "---> About to kill PID `cat $PIDFILE`"
|
112
|
-
if [ "$USE_LOCAL_BUNDLE" -eq 1 ]; then
|
113
|
-
cd $1 && bundle exec pumactl --state $STATEFILE stop
|
114
|
-
else
|
115
|
-
pumactl --state $STATEFILE stop
|
116
|
-
fi
|
117
|
-
# Many daemons don't delete their pidfiles when they exit.
|
118
|
-
rm -f $PIDFILE $STATEFILE
|
119
|
-
fi
|
120
|
-
else
|
121
|
-
log_daemon_msg "---> No puma here..."
|
122
|
-
fi
|
123
|
-
return 0
|
124
|
-
}
|
125
|
-
|
126
|
-
#
|
127
|
-
# Function that restarts the jungle
|
128
|
-
#
|
129
|
-
do_restart() {
|
130
|
-
for i in $JUNGLE; do
|
131
|
-
dir=`echo $i | cut -d , -f 1`
|
132
|
-
do_restart_one $dir
|
133
|
-
done
|
134
|
-
}
|
135
|
-
|
136
|
-
#
|
137
|
-
# Function that sends a SIGUSR2 to the daemon/service
|
138
|
-
#
|
139
|
-
do_restart_one() {
|
140
|
-
PIDFILE=$1/tmp/pids/puma.pid
|
141
|
-
|
142
|
-
if [ -e $PIDFILE ]; then
|
143
|
-
log_daemon_msg "--> About to restart puma $1"
|
144
|
-
kill -s USR2 `cat $PIDFILE`
|
145
|
-
# TODO Check if process exist
|
146
|
-
else
|
147
|
-
log_daemon_msg "--> Your puma was never playing... Let's get it out there first"
|
148
|
-
do_start_one $1
|
149
|
-
fi
|
150
|
-
return 0
|
151
|
-
}
|
152
|
-
|
153
|
-
#
|
154
|
-
# Function that phased restarts the jungle
|
155
|
-
#
|
156
|
-
do_phased_restart() {
|
157
|
-
for i in $JUNGLE; do
|
158
|
-
dir=`echo $i | cut -d , -f 1`
|
159
|
-
do_phased_restart_one $dir
|
160
|
-
done
|
161
|
-
}
|
162
|
-
|
163
|
-
#
|
164
|
-
# Function that sends a SIGUSR1 to the daemon/service
|
165
|
-
#
|
166
|
-
do_phased_restart_one() {
|
167
|
-
PIDFILE=$1/tmp/pids/puma.pid
|
168
|
-
|
169
|
-
if [ -e $PIDFILE ]; then
|
170
|
-
log_daemon_msg "--> About to restart puma $1"
|
171
|
-
kill -s USR1 `cat $PIDFILE`
|
172
|
-
# TODO Check if process exist
|
173
|
-
else
|
174
|
-
log_daemon_msg "--> Your puma was never playing... Let's get it out there first"
|
175
|
-
do_start_one $1
|
176
|
-
fi
|
177
|
-
return 0
|
178
|
-
}
|
179
|
-
|
180
|
-
#
|
181
|
-
# Function that statuss the jungle
|
182
|
-
#
|
183
|
-
do_status() {
|
184
|
-
for i in $JUNGLE; do
|
185
|
-
dir=`echo $i | cut -d , -f 1`
|
186
|
-
do_status_one $dir
|
187
|
-
done
|
188
|
-
}
|
189
|
-
|
190
|
-
#
|
191
|
-
# Function that sends a SIGUSR2 to the daemon/service
|
192
|
-
#
|
193
|
-
do_status_one() {
|
194
|
-
PIDFILE=$1/tmp/pids/puma.pid
|
195
|
-
i=`grep $1 $CONFIG`
|
196
|
-
dir=`echo $i | cut -d , -f 1`
|
197
|
-
|
198
|
-
if [ -e $PIDFILE ]; then
|
199
|
-
log_daemon_msg "--> About to status puma $1"
|
200
|
-
if [ "$USE_LOCAL_BUNDLE" -eq 1 ]; then
|
201
|
-
cd $1 && bundle exec pumactl --state $dir/tmp/pids/puma.state stats
|
202
|
-
else
|
203
|
-
pumactl --state $dir/tmp/pids/puma.state stats
|
204
|
-
fi
|
205
|
-
# kill -s USR2 `cat $PIDFILE`
|
206
|
-
# TODO Check if process exist
|
207
|
-
else
|
208
|
-
log_daemon_msg "--> $1 isn't there :(..."
|
209
|
-
fi
|
210
|
-
return 0
|
211
|
-
}
|
212
|
-
|
213
|
-
do_add() {
|
214
|
-
str=""
|
215
|
-
# App's directory
|
216
|
-
if [ -d "$1" ]; then
|
217
|
-
if [ "`grep -c "^$1" $CONFIG`" -eq 0 ]; then
|
218
|
-
str=$1
|
219
|
-
else
|
220
|
-
echo "The app is already being managed. Remove it if you want to update its config."
|
221
|
-
exit 1
|
222
|
-
fi
|
223
|
-
else
|
224
|
-
echo "The directory $1 doesn't exist."
|
225
|
-
exit 1
|
226
|
-
fi
|
227
|
-
# User to run it as
|
228
|
-
if [ "`grep -c "^$2:" /etc/passwd`" -eq 0 ]; then
|
229
|
-
echo "The user $2 doesn't exist."
|
230
|
-
exit 1
|
231
|
-
else
|
232
|
-
str="$str,$2"
|
233
|
-
fi
|
234
|
-
# Config file
|
235
|
-
if [ "$3" != "" ]; then
|
236
|
-
if [ -e $3 ]; then
|
237
|
-
str="$str,$3"
|
238
|
-
else
|
239
|
-
echo "The config file $3 doesn't exist."
|
240
|
-
exit 1
|
241
|
-
fi
|
242
|
-
fi
|
243
|
-
# Log file
|
244
|
-
if [ "$4" != "" ]; then
|
245
|
-
str="$str,$4"
|
246
|
-
fi
|
247
|
-
|
248
|
-
# Environment variables
|
249
|
-
if [ "$5" != "" ]; then
|
250
|
-
str="$str,$5"
|
251
|
-
fi
|
252
|
-
|
253
|
-
# Add it to the jungle
|
254
|
-
echo $str >> $CONFIG
|
255
|
-
log_daemon_msg "Added a Puma to the jungle: $str. You still have to start it though."
|
256
|
-
}
|
257
|
-
|
258
|
-
do_remove() {
|
259
|
-
if [ "`grep -c "^$1" $CONFIG`" -eq 0 ]; then
|
260
|
-
echo "There's no app $1 to remove."
|
261
|
-
else
|
262
|
-
# Stop it first.
|
263
|
-
do_stop_one $1
|
264
|
-
# Remove it from the config.
|
265
|
-
sed -i "\\:^$1:d" $CONFIG
|
266
|
-
log_daemon_msg "Removed a Puma from the jungle: $1."
|
267
|
-
fi
|
268
|
-
}
|
269
|
-
|
270
|
-
config_bundler() {
|
271
|
-
HOME="$(eval echo ~$(id -un))"
|
272
|
-
|
273
|
-
if [ -d "$1/.rbenv/bin" ]; then
|
274
|
-
PATH="$1/.rbenv/bin:$1/.rbenv/shims:$1"
|
275
|
-
eval "$(rbenv init -)"
|
276
|
-
USE_LOCAL_BUNDLE=1
|
277
|
-
return 0
|
278
|
-
|
279
|
-
elif [ -d "/usr/local/rbenv/bin" ]; then
|
280
|
-
PATH="/usr/local/rbenv/bin:/usr/local/rbenv/shims:$PATH"
|
281
|
-
eval "$(rbenv init -)"
|
282
|
-
USE_LOCAL_BUNDLE=1
|
283
|
-
return 0
|
284
|
-
|
285
|
-
elif [ -d "$HOME/.rbenv/bin" ]; then
|
286
|
-
PATH="$HOME/.rbenv/bin:$HOME/.rbenv/shims:$PATH"
|
287
|
-
eval "$(rbenv init -)"
|
288
|
-
USE_LOCAL_BUNDLE=1
|
289
|
-
return 0
|
290
|
-
|
291
|
-
# TODO: test rvm
|
292
|
-
# elif [ -f /etc/profile.d/rvm.sh ]; then
|
293
|
-
# source /etc/profile.d/rvm.sh
|
294
|
-
# elif [ -f /usr/local/rvm/scripts/rvm ]; then
|
295
|
-
# source /etc/profile.d/rvm.sh
|
296
|
-
# elif [ -f "$HOME/.rvm/scripts/rvm" ]; then
|
297
|
-
# source "$HOME/.rvm/scripts/rvm"
|
298
|
-
# TODO: don't know what to do with chruby
|
299
|
-
# elif [ -f /usr/local/share/chruby/chruby.sh ]; then
|
300
|
-
# source /usr/local/share/chruby/chruby.sh
|
301
|
-
# if [ -f /usr/local/share/chruby/auto.sh ]; then
|
302
|
-
# source /usr/local/share/chruby/auto.sh
|
303
|
-
# fi
|
304
|
-
# if you aren't using auto, set your version here
|
305
|
-
# chruby 2.0.0
|
306
|
-
fi
|
307
|
-
|
308
|
-
return 1
|
309
|
-
}
|
310
|
-
|
311
|
-
config_bundler
|
312
|
-
|
313
|
-
case "$1" in
|
314
|
-
start)
|
315
|
-
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
316
|
-
if [ "$#" -eq 1 ]; then
|
317
|
-
do_start
|
318
|
-
else
|
319
|
-
i=`grep $2 $CONFIG`
|
320
|
-
dir=`echo $i | cut -d , -f 1`
|
321
|
-
do_start_one $dir
|
322
|
-
fi
|
323
|
-
case "$?" in
|
324
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
325
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
326
|
-
esac
|
327
|
-
;;
|
328
|
-
stop)
|
329
|
-
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
330
|
-
if [ "$#" -eq 1 ]; then
|
331
|
-
do_stop
|
332
|
-
else
|
333
|
-
i=`grep $2 $CONFIG`
|
334
|
-
dir=`echo $i | cut -d , -f 1`
|
335
|
-
do_stop_one $dir
|
336
|
-
fi
|
337
|
-
case "$?" in
|
338
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
339
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
340
|
-
esac
|
341
|
-
;;
|
342
|
-
status)
|
343
|
-
# TODO Implement.
|
344
|
-
log_daemon_msg "Status $DESC" "$NAME"
|
345
|
-
if [ "$#" -eq 1 ]; then
|
346
|
-
do_status
|
347
|
-
else
|
348
|
-
i=`grep $2 $CONFIG`
|
349
|
-
dir=`echo $i | cut -d , -f 1`
|
350
|
-
do_status_one $dir
|
351
|
-
fi
|
352
|
-
case "$?" in
|
353
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
354
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
355
|
-
esac
|
356
|
-
;;
|
357
|
-
restart)
|
358
|
-
log_daemon_msg "Restarting $DESC" "$NAME"
|
359
|
-
if [ "$#" -eq 1 ]; then
|
360
|
-
do_restart
|
361
|
-
else
|
362
|
-
i=`grep $2 $CONFIG`
|
363
|
-
dir=`echo $i | cut -d , -f 1`
|
364
|
-
do_restart_one $dir
|
365
|
-
fi
|
366
|
-
case "$?" in
|
367
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
368
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
369
|
-
esac
|
370
|
-
;;
|
371
|
-
phased-restart)
|
372
|
-
log_daemon_msg "Restarting (phased) $DESC" "$NAME"
|
373
|
-
if [ "$#" -eq 1 ]; then
|
374
|
-
do_phased_restart
|
375
|
-
else
|
376
|
-
i=`grep $2 $CONFIG`
|
377
|
-
dir=`echo $i | cut -d , -f 1`
|
378
|
-
do_phased_restart_one $dir
|
379
|
-
fi
|
380
|
-
case "$?" in
|
381
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
382
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
383
|
-
esac
|
384
|
-
;;
|
385
|
-
add)
|
386
|
-
if [ "$#" -lt 3 ]; then
|
387
|
-
echo "Please, specify the app's directory and the user that will run it at least."
|
388
|
-
echo " Usage: $SCRIPTNAME add /path/to/app user /path/to/app/config/puma.rb /path/to/app/config/log/puma.log"
|
389
|
-
echo " config and log are optionals."
|
390
|
-
exit 1
|
391
|
-
else
|
392
|
-
do_add $2 $3 $4 $5
|
393
|
-
fi
|
394
|
-
case "$?" in
|
395
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
396
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
397
|
-
esac
|
398
|
-
;;
|
399
|
-
remove)
|
400
|
-
if [ "$#" -lt 2 ]; then
|
401
|
-
echo "Please, specifiy the app's directory to remove."
|
402
|
-
exit 1
|
403
|
-
else
|
404
|
-
do_remove $2
|
405
|
-
fi
|
406
|
-
case "$?" in
|
407
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
408
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
409
|
-
esac
|
410
|
-
;;
|
411
|
-
*)
|
412
|
-
echo "Usage:" >&2
|
413
|
-
echo " Run the jungle: $SCRIPTNAME {start|stop|status|restart|phased-restart}" >&2
|
414
|
-
echo " Add a Puma: $SCRIPTNAME add /path/to/app user /path/to/app/config/puma.rb /path/to/app/config/log/puma.log"
|
415
|
-
echo " config and log are optionals."
|
416
|
-
echo " Remove a Puma: $SCRIPTNAME remove /path/to/app"
|
417
|
-
echo " On a Puma: $SCRIPTNAME {start|stop|status|restart|phased-restart} PUMA-NAME" >&2
|
418
|
-
exit 3
|
419
|
-
;;
|
420
|
-
esac
|
421
|
-
:
|
@@ -1,328 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
#
|
3
|
-
# puma - this script starts and stops the puma daemon
|
4
|
-
#
|
5
|
-
# chkconfig: - 85 15
|
6
|
-
# description: Description \
|
7
|
-
# goes here...
|
8
|
-
# processname: puma
|
9
|
-
# config: /etc/puma.conf
|
10
|
-
# pidfile: /home/stanislaw/apps/micro-apps/puma/puma.pid
|
11
|
-
# Author: Darío Javier Cravero <'dario@exordo.com'>
|
12
|
-
#
|
13
|
-
# Do NOT "set -e"
|
14
|
-
# Original script https://github.com/puma/puma/blob/master/tools/jungle/puma
|
15
|
-
# It was modified here by Stanislaw Pankevich <'s.pankevich@gmail.com'>
|
16
|
-
# to run on CentOS 5.5 boxes.
|
17
|
-
# Script works perfectly on CentOS 5: script uses its native daemon().
|
18
|
-
# Puma is being stopped/restarted by sending signals, control app is not used.
|
19
|
-
# Source function library.
|
20
|
-
. /etc/rc.d/init.d/functions
|
21
|
-
|
22
|
-
# Source networking configuration.
|
23
|
-
. /etc/sysconfig/network
|
24
|
-
# Check that networking is up.
|
25
|
-
[ "$NETWORKING" = "no" ] && exit 0
|
26
|
-
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
27
|
-
PATH=/usr/local/bin:/usr/local/sbin/:/sbin:/usr/sbin:/bin:/usr/bin
|
28
|
-
DESC="Puma rack web server"
|
29
|
-
NAME=puma
|
30
|
-
DAEMON=$NAME
|
31
|
-
SCRIPTNAME=/etc/init.d/$NAME
|
32
|
-
CONFIG=<%=fetch(:puma_jungle_conf)%>
|
33
|
-
JUNGLE=`cat $CONFIG`
|
34
|
-
RUNPUMA=<%=fetch(:puma_run_path)%>
|
35
|
-
# Skipping the following non-CentOS string
|
36
|
-
# Load the VERBOSE setting and other rcS variables
|
37
|
-
# . /lib/init/vars.sh
|
38
|
-
# CentOS does not have these functions natively
|
39
|
-
log_daemon_msg() { echo "$@"; }
|
40
|
-
log_end_msg() { [ $1 -eq 0 ] && RES=OK; logger ${RES:=FAIL}; }
|
41
|
-
# Define LSB log_* functions.
|
42
|
-
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
43
|
-
. /lib/lsb/init-functions
|
44
|
-
|
45
|
-
#
|
46
|
-
# Function that starts the jungle
|
47
|
-
#
|
48
|
-
do_start() {
|
49
|
-
log_daemon_msg "=> Running the jungle..."
|
50
|
-
for i in $JUNGLE; do
|
51
|
-
dir=`echo $i | cut -d , -f 1`
|
52
|
-
user=`echo $i | cut -d , -f 2`
|
53
|
-
config_file=`echo $i | cut -d , -f 3`
|
54
|
-
if [ "$config_file" = "" ]; then
|
55
|
-
config_file="$dir/config/puma.rb"
|
56
|
-
fi
|
57
|
-
log_file=`echo $i | cut -d , -f 4`
|
58
|
-
if [ "$log_file" = "" ]; then
|
59
|
-
log_file="$dir/log/puma.log"
|
60
|
-
fi
|
61
|
-
do_start_one $dir $user $config_file $log_file
|
62
|
-
done
|
63
|
-
}
|
64
|
-
do_start_one() {
|
65
|
-
PIDFILE=$1/tmp/pids/puma.pid
|
66
|
-
if [ -e $PIDFILE ]; then
|
67
|
-
PID=`cat $PIDFILE`
|
68
|
-
# If the puma isn't running, run it, otherwise restart it.
|
69
|
-
if [ "`ps -A -o pid= | grep -c $PID`" -eq 0 ]; then
|
70
|
-
do_start_one_do $1 $2
|
71
|
-
else
|
72
|
-
do_restart_one $1
|
73
|
-
fi
|
74
|
-
else
|
75
|
-
do_start_one_do $1 $2 $3 $4
|
76
|
-
fi
|
77
|
-
}
|
78
|
-
do_start_one_do() {
|
79
|
-
log_daemon_msg "--> Woke up puma $1"
|
80
|
-
daemon --user $2 $RUNPUMA $1
|
81
|
-
}
|
82
|
-
#
|
83
|
-
# Function that stops the jungle
|
84
|
-
#
|
85
|
-
do_stop() {
|
86
|
-
log_daemon_msg "=> Putting all the beasts to bed..."
|
87
|
-
for i in $JUNGLE; do
|
88
|
-
dir=`echo $i | cut -d , -f 1`
|
89
|
-
do_stop_one $dir
|
90
|
-
done
|
91
|
-
}
|
92
|
-
#
|
93
|
-
# Function that stops the daemon/service
|
94
|
-
#
|
95
|
-
do_stop_one() {
|
96
|
-
log_daemon_msg "--> Stopping $1"
|
97
|
-
PIDFILE=$1/tmp/pids/puma.pid
|
98
|
-
STATEFILE=$1/tmp/pids/puma.state
|
99
|
-
echo $PIDFILE
|
100
|
-
if [ -e $PIDFILE ]; then
|
101
|
-
PID=`cat $PIDFILE`
|
102
|
-
echo "Pid:"
|
103
|
-
echo $PID
|
104
|
-
if [ "`ps -A -o pid= | grep -c $PID`" -eq 0 ]; then
|
105
|
-
log_daemon_msg "---> Puma $1 isn't running."
|
106
|
-
else
|
107
|
-
log_daemon_msg "---> About to kill PID `cat $PIDFILE`"
|
108
|
-
pumactl --state $STATEFILE stop
|
109
|
-
rm -f $PIDFILE $STATEFILE
|
110
|
-
fi
|
111
|
-
else
|
112
|
-
log_daemon_msg "---> No puma here..."
|
113
|
-
fi
|
114
|
-
return 0
|
115
|
-
}
|
116
|
-
#
|
117
|
-
# Function that restarts the jungle
|
118
|
-
#
|
119
|
-
do_restart() {
|
120
|
-
for i in $JUNGLE; do
|
121
|
-
dir=`echo $i | cut -d , -f 1`
|
122
|
-
do_restart_one $dir
|
123
|
-
done
|
124
|
-
}
|
125
|
-
#
|
126
|
-
# Function that sends a SIGUSR2 to the daemon/service
|
127
|
-
#
|
128
|
-
do_restart_one() {
|
129
|
-
PIDFILE=$1/tmp/pids/puma.pid
|
130
|
-
i=`grep $1 $CONFIG`
|
131
|
-
dir=`echo $i | cut -d , -f 1`
|
132
|
-
if [ -e $PIDFILE ]; then
|
133
|
-
log_daemon_msg "--> About to restart puma $1"
|
134
|
-
pumactl --state $dir/tmp/pids/puma.state restart
|
135
|
-
|
136
|
-
else
|
137
|
-
log_daemon_msg "--> Your puma was never playing... Let's get it out there first"
|
138
|
-
user=`echo $i | cut -d , -f 2`
|
139
|
-
config_file=`echo $i | cut -d , -f 3`
|
140
|
-
if [ "$config_file" = "" ]; then
|
141
|
-
config_file="$dir/config/puma.rb"
|
142
|
-
fi
|
143
|
-
log_file=`echo $i | cut -d , -f 4`
|
144
|
-
if [ "$log_file" = "" ]; then
|
145
|
-
log_file="$dir/log/puma.log"
|
146
|
-
fi
|
147
|
-
do_start_one $dir $user $config_file $log_file
|
148
|
-
fi
|
149
|
-
return 0
|
150
|
-
}
|
151
|
-
#
|
152
|
-
# Function that statuss then jungle
|
153
|
-
#
|
154
|
-
do_status() {
|
155
|
-
for i in $JUNGLE; do
|
156
|
-
dir=`echo $i | cut -d , -f 1`
|
157
|
-
do_status_one $dir
|
158
|
-
done
|
159
|
-
}
|
160
|
-
#
|
161
|
-
# Function that sends a SIGUSR2 to the daemon/service
|
162
|
-
#
|
163
|
-
do_status_one() {
|
164
|
-
PIDFILE=$1/tmp/pids/puma.pid
|
165
|
-
i=`grep $1 $CONFIG`
|
166
|
-
dir=`echo $i | cut -d , -f 1`
|
167
|
-
if [ -e $PIDFILE ]; then
|
168
|
-
log_daemon_msg "--> About to status puma $1"
|
169
|
-
pumactl --state $dir/tmp/pids/puma.state stats
|
170
|
-
|
171
|
-
else
|
172
|
-
log_daemon_msg "--> $1 isn't there :(..."
|
173
|
-
fi
|
174
|
-
return 0
|
175
|
-
}
|
176
|
-
do_add() {
|
177
|
-
str=""
|
178
|
-
# App's directory
|
179
|
-
if [ -d "$1" ]; then
|
180
|
-
if [ "`grep -c "^$1" $CONFIG`" -eq 0 ]; then
|
181
|
-
str=$1
|
182
|
-
else
|
183
|
-
echo "The app is already being managed. Remove it if you want to update its config."
|
184
|
-
exit 1
|
185
|
-
fi
|
186
|
-
else
|
187
|
-
echo "The directory $1 doesn't exist."
|
188
|
-
exit 1
|
189
|
-
fi
|
190
|
-
# User to run it as
|
191
|
-
if [ "`grep -c "^$2:" /etc/passwd`" -eq 0 ]; then
|
192
|
-
echo "The user $2 doesn't exist."
|
193
|
-
exit 1
|
194
|
-
else
|
195
|
-
str="$str,$2"
|
196
|
-
fi
|
197
|
-
# Config file
|
198
|
-
if [ "$3" != "" ]; then
|
199
|
-
if [ -e $3 ]; then
|
200
|
-
str="$str,$3"
|
201
|
-
else
|
202
|
-
echo "The config file $3 doesn't exist."
|
203
|
-
exit 1
|
204
|
-
fi
|
205
|
-
fi
|
206
|
-
# Log file
|
207
|
-
if [ "$4" != "" ]; then
|
208
|
-
str="$str,$4"
|
209
|
-
fi
|
210
|
-
# Add it to the jungle
|
211
|
-
echo $str >> $CONFIG
|
212
|
-
log_daemon_msg "Added a Puma to the jungle: $str. You still have to start it though."
|
213
|
-
}
|
214
|
-
do_remove() {
|
215
|
-
if [ "`grep -c "^$1" $CONFIG`" -eq 0 ]; then
|
216
|
-
echo "There's no app $1 to remove."
|
217
|
-
else
|
218
|
-
# Stop it first.
|
219
|
-
do_stop_one $1
|
220
|
-
# Remove it from the config.
|
221
|
-
sed -i "\\:^$1:d" $CONFIG
|
222
|
-
log_daemon_msg "Removed a Puma from the jungle: $1."
|
223
|
-
fi
|
224
|
-
}
|
225
|
-
case "$1" in
|
226
|
-
start)
|
227
|
-
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
228
|
-
if [ "$#" -eq 1 ]; then
|
229
|
-
do_start
|
230
|
-
else
|
231
|
-
i=`grep $2 $CONFIG`
|
232
|
-
dir=`echo $i | cut -d , -f 1`
|
233
|
-
user=`echo $i | cut -d , -f 2`
|
234
|
-
config_file=`echo $i | cut -d , -f 3`
|
235
|
-
if [ "$config_file" = "" ]; then
|
236
|
-
config_file="$dir/config/puma.rb"
|
237
|
-
fi
|
238
|
-
log_file=`echo $i | cut -d , -f 4`
|
239
|
-
if [ "$log_file" = "" ]; then
|
240
|
-
log_file="$dir/log/puma.log"
|
241
|
-
fi
|
242
|
-
do_start_one $dir $user $config_file $log_file
|
243
|
-
fi
|
244
|
-
case "$?" in
|
245
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
246
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
247
|
-
esac
|
248
|
-
;;
|
249
|
-
stop)
|
250
|
-
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
251
|
-
if [ "$#" -eq 1 ]; then
|
252
|
-
do_stop
|
253
|
-
else
|
254
|
-
i=`grep $2 $CONFIG`
|
255
|
-
dir=`echo $i | cut -d , -f 1`
|
256
|
-
do_stop_one $dir
|
257
|
-
fi
|
258
|
-
case "$?" in
|
259
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
260
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
261
|
-
esac
|
262
|
-
;;
|
263
|
-
status)
|
264
|
-
# TODO Implement.
|
265
|
-
log_daemon_msg "Status $DESC" "$NAME"
|
266
|
-
if [ "$#" -eq 1 ]; then
|
267
|
-
do_status
|
268
|
-
else
|
269
|
-
i=`grep $2 $CONFIG`
|
270
|
-
dir=`echo $i | cut -d , -f 1`
|
271
|
-
do_status_one $dir
|
272
|
-
fi
|
273
|
-
case "$?" in
|
274
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
275
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
276
|
-
esac
|
277
|
-
;;
|
278
|
-
restart)
|
279
|
-
log_daemon_msg "Restarting $DESC" "$NAME"
|
280
|
-
if [ "$#" -eq 1 ]; then
|
281
|
-
do_restart
|
282
|
-
else
|
283
|
-
i=`grep $2 $CONFIG`
|
284
|
-
dir=`echo $i | cut -d , -f 1`
|
285
|
-
do_restart_one $dir
|
286
|
-
fi
|
287
|
-
case "$?" in
|
288
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
289
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
290
|
-
esac
|
291
|
-
;;
|
292
|
-
add)
|
293
|
-
if [ "$#" -lt 3 ]; then
|
294
|
-
echo "Please, specifiy the app's directory and the user that will run it at least."
|
295
|
-
echo " Usage: $SCRIPTNAME add /path/to/app user /path/to/app/config/puma.rb /path/to/app/config/log/puma.log"
|
296
|
-
echo " config and log are optionals."
|
297
|
-
exit 1
|
298
|
-
else
|
299
|
-
do_add $2 $3 $4 $5
|
300
|
-
fi
|
301
|
-
case "$?" in
|
302
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
303
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
304
|
-
esac
|
305
|
-
;;
|
306
|
-
remove)
|
307
|
-
if [ "$#" -lt 2 ]; then
|
308
|
-
echo "Please, specifiy the app's directory to remove."
|
309
|
-
exit 1
|
310
|
-
else
|
311
|
-
do_remove $2
|
312
|
-
fi
|
313
|
-
case "$?" in
|
314
|
-
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
315
|
-
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
316
|
-
esac
|
317
|
-
;;
|
318
|
-
*)
|
319
|
-
echo "Usage:" >&2
|
320
|
-
echo " Run the jungle: $SCRIPTNAME {start|stop|status|restart}" >&2
|
321
|
-
echo " Add a Puma: $SCRIPTNAME add /path/to/app user /path/to/app/config/puma.rb /path/to/app/config/log/puma.log"
|
322
|
-
echo " config and log are optionals."
|
323
|
-
echo " Remove a Puma: $SCRIPTNAME remove /path/to/app"
|
324
|
-
echo " On a Puma: $SCRIPTNAME {start|stop|status|restart} PUMA-NAME" >&2
|
325
|
-
exit 3
|
326
|
-
;;
|
327
|
-
esac
|
328
|
-
:
|
@@ -1,7 +0,0 @@
|
|
1
|
-
# Monit configuration for Puma
|
2
|
-
# Service name: <%= puma_monit_service_name %>
|
3
|
-
#
|
4
|
-
check process <%= puma_monit_service_name %>
|
5
|
-
with pidfile "<%= fetch(:puma_pid) %>"
|
6
|
-
start program = "/usr/bin/sudo -iu <%= puma_user(@role) %> /bin/bash -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:puma] %> %> --daemon'"
|
7
|
-
stop program = "/usr/bin/sudo -iu <%= puma_user(@role) %> /bin/bash -c 'cd <%= current_path %> && <%= SSHKit.config.command_map[:pumactl] %> -S <%= fetch(:puma_state) %> stop'"
|