foreman-capistrano 0.51.5 → 0.52.0
Sign up to get free protection for your applications and to get access to all the features.
- data/data/export/monit/monitrc.erb +19 -0
- data/data/export/monit/wrapper.sh.erb +75 -0
- data/lib/foreman/capistrano.rb +16 -5
- data/lib/foreman/export/monit.rb +47 -0
- data/lib/foreman/version.rb +1 -1
- metadata +5 -2
@@ -0,0 +1,19 @@
|
|
1
|
+
<% engine.each_process do |name, process| %>
|
2
|
+
<% 1.upto(engine.formation[name]) do |num| %>
|
3
|
+
<% port = engine.port_for(process, num) %>
|
4
|
+
check process <%= app %>-<%= name %>-<%= num %> with pidfile <%= pid_file_for(name, num) %>
|
5
|
+
depends on <%= File.basename(check_file_for(name)) %>
|
6
|
+
depends on <%= File.basename(app_check_file) %>
|
7
|
+
group <%= app %>-<%= name %>
|
8
|
+
group <%= app %>
|
9
|
+
start program "/usr/local/rvm/bin/rvm-shell -c 'RAILS_ENV=production PORT=<%= port %> PID_FILE=<%= pid_file_for(name, num) %> LOG_FILE=<%= log_file_for(name, num) %> <%= wrapper_path_for(name) %> start'"
|
10
|
+
stop program "/usr/local/rvm/bin/rvm-shell -c 'PID_FILE=<%= pid_file_for(name, num) %> <%= wrapper_path_for(name) %> stop'"
|
11
|
+
|
12
|
+
<% end %>
|
13
|
+
check file <%= File.basename(check_file_for(name)) %> with path <%= check_file_for(name) %>
|
14
|
+
if changed timestamp then restart
|
15
|
+
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
check file <%= File.basename(app_check_file) %> with path <%= app_check_file %>
|
19
|
+
if changed timestamp then restart
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
PID_FILE=${PID_FILE:-<%= pid %>/<%= name %>.pid}
|
4
|
+
LOG_FILE=${LOG_FILE:-<%= log %>/<%= name %>.log}
|
5
|
+
|
6
|
+
STATUS_RUNNING=0
|
7
|
+
STATUS_DEAD_WITH_PID=1
|
8
|
+
STATUS_UNKNOWN=4
|
9
|
+
|
10
|
+
function checkpid() {
|
11
|
+
[ -z $1 ] && return 1
|
12
|
+
[ -d /proc/$1 ] && return 0
|
13
|
+
return 1
|
14
|
+
}
|
15
|
+
|
16
|
+
function start() {
|
17
|
+
echo -n "Starting process $0 ..."
|
18
|
+
if [ -s $PID_FILE ]
|
19
|
+
then
|
20
|
+
read pid < $PID_FILE
|
21
|
+
if checkpid $pid 2>&1; then
|
22
|
+
echo "[FAIL] process with PID ${pid} is running."
|
23
|
+
exit $STATUS_UNKNOWN
|
24
|
+
fi
|
25
|
+
fi
|
26
|
+
|
27
|
+
cd <%= engine.root %>; <%= process.command %> >> $LOG_FILE 2>&1 &
|
28
|
+
|
29
|
+
if [ $? -eq 0 ]; then
|
30
|
+
echo $! > $PID_FILE
|
31
|
+
echo "[OK]"
|
32
|
+
else
|
33
|
+
echo "[FAIL]"
|
34
|
+
exit $STATUS_UNKNOWN
|
35
|
+
fi
|
36
|
+
}
|
37
|
+
|
38
|
+
function stop() {
|
39
|
+
echo -n "Terminating process $0 ..."
|
40
|
+
if [ -s $PID_FILE ]
|
41
|
+
then
|
42
|
+
read pid < $PID_FILE
|
43
|
+
if checkpid $pid 2>&1; then
|
44
|
+
kill -TERM $pid
|
45
|
+
if [ $? -eq 0 ]; then
|
46
|
+
echo $! > $PID_FILE
|
47
|
+
echo "[OK]"
|
48
|
+
rm -rf $PID_FILE
|
49
|
+
else
|
50
|
+
echo "[FAIL]"
|
51
|
+
exit $STATUS_UNKNOWN
|
52
|
+
fi
|
53
|
+
else
|
54
|
+
echo "[FAIL] process with PID ${pid} does not exist"
|
55
|
+
exit $STATUS_DEAD_WITH_PID
|
56
|
+
fi
|
57
|
+
else
|
58
|
+
echo "[FAIL] pid file $PID_FILE is not found"
|
59
|
+
exit $STATUS_UNKOWN
|
60
|
+
fi
|
61
|
+
}
|
62
|
+
|
63
|
+
case "$1" in
|
64
|
+
start)
|
65
|
+
start
|
66
|
+
;;
|
67
|
+
stop)
|
68
|
+
stop
|
69
|
+
;;
|
70
|
+
*)
|
71
|
+
echo "Usage: $0 {start|stop}"
|
72
|
+
exit 0
|
73
|
+
esac
|
74
|
+
|
75
|
+
exit $STATUS_RUNNING
|
data/lib/foreman/capistrano.rb
CHANGED
@@ -33,24 +33,35 @@ if defined?(Capistrano)
|
|
33
33
|
args << "-l #{foreman_log}"
|
34
34
|
args << "-p #{foreman_port}"
|
35
35
|
args << "-c #{foreman_concurrency}" if foreman_concurrency
|
36
|
-
run "cd #{
|
36
|
+
run "cd #{current_path} && #{bundle_cmd} exec foreman export #{args.join(' ')}"
|
37
37
|
end
|
38
38
|
|
39
39
|
desc "Start the application services"
|
40
40
|
task :start, :roles => :app do
|
41
|
-
|
41
|
+
if foreman_format == 'upstart'
|
42
|
+
run "#{sudo} start #{application}"
|
43
|
+
elsif foreman_format == 'monit'
|
44
|
+
run "monit start -g #{application}"
|
45
|
+
end
|
42
46
|
end
|
43
47
|
|
44
48
|
desc "Stop the application services"
|
45
49
|
task :stop, :roles => :app do
|
46
|
-
|
50
|
+
if foreman_format == 'upstart'
|
51
|
+
run "#{sudo} stop #{application}"
|
52
|
+
elsif foreman_format == 'monit'
|
53
|
+
run "monit stop -g #{application}"
|
54
|
+
end
|
47
55
|
end
|
48
56
|
|
49
57
|
desc "Restart the application services"
|
50
58
|
task :restart, :roles => :app do
|
51
|
-
|
59
|
+
if foreman_format == 'upstart'
|
60
|
+
run "#{sudo} start #{application} || #{sudo} restart #{application}"
|
61
|
+
elsif foreman_format == 'monit'
|
62
|
+
run "monit restart -g #{application}"
|
63
|
+
end
|
52
64
|
end
|
53
|
-
|
54
65
|
end
|
55
66
|
end
|
56
67
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'foreman/export'
|
2
|
+
require 'foreman/cli'
|
3
|
+
|
4
|
+
class Foreman::Export::Monit < Foreman::Export::Base
|
5
|
+
attr_reader :pid, :check
|
6
|
+
|
7
|
+
def export
|
8
|
+
super
|
9
|
+
|
10
|
+
@user ||= app
|
11
|
+
@log = File.expand_path("#{@location}/log")
|
12
|
+
@pid = File.expand_path("#{@location}/pids")
|
13
|
+
@check = File.expand_path("#{@location}/lock")
|
14
|
+
@location = File.expand_path(@location)
|
15
|
+
FileUtils.mkdir_p(@pid)
|
16
|
+
FileUtils.mkdir_p(@check)
|
17
|
+
|
18
|
+
engine.each_process do |name, process|
|
19
|
+
write_template "monit/wrapper.sh.erb", "#{app}-#{name}.sh", binding
|
20
|
+
chmod 0755, "#{app}-#{name}.sh"
|
21
|
+
`touch #{check_file_for(name)}`
|
22
|
+
end
|
23
|
+
|
24
|
+
`touch #{app_check_file}`
|
25
|
+
write_template "monit/monitrc.erb", "#{app}.monitrc", binding
|
26
|
+
end
|
27
|
+
|
28
|
+
def wrapper_path_for(name)
|
29
|
+
File.join(location, "#{app}-#{name}.sh")
|
30
|
+
end
|
31
|
+
|
32
|
+
def pid_file_for(name, num)
|
33
|
+
File.join(pid, "#{app}-#{name}-#{num}.pid")
|
34
|
+
end
|
35
|
+
|
36
|
+
def log_file_for(name, num)
|
37
|
+
File.join(log, "#{app}-#{name}-#{num}.log")
|
38
|
+
end
|
39
|
+
|
40
|
+
def check_file_for(name)
|
41
|
+
File.join(check, "#{app}-#{name}.restart")
|
42
|
+
end
|
43
|
+
|
44
|
+
def app_check_file
|
45
|
+
File.join(check, "#{app}.restart")
|
46
|
+
end
|
47
|
+
end
|
data/lib/foreman/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman-capistrano
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.52.0
|
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:
|
12
|
+
date: 2013-01-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- lib/foreman/procfile.rb
|
43
43
|
- lib/foreman/distribution.rb
|
44
44
|
- lib/foreman/export/bluepill.rb
|
45
|
+
- lib/foreman/export/monit.rb
|
45
46
|
- lib/foreman/export/supervisord.rb
|
46
47
|
- lib/foreman/export/runit.rb
|
47
48
|
- lib/foreman/export/inittab.rb
|
@@ -107,6 +108,8 @@ files:
|
|
107
108
|
- data/export/bluepill/master.pill.erb
|
108
109
|
- data/export/launchd/launchd.plist.erb
|
109
110
|
- data/export/supervisord/app.conf.erb
|
111
|
+
- data/export/monit/wrapper.sh.erb
|
112
|
+
- data/export/monit/monitrc.erb
|
110
113
|
- data/example/ticker
|
111
114
|
- data/example/Procfile
|
112
115
|
- data/example/utf8
|