foreman 0.60.2 → 0.61.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.
- data/lib/foreman.rb +2 -2
- data/lib/foreman/capistrano.rb +1 -1
- data/lib/foreman/cli.rb +1 -0
- data/lib/foreman/engine.rb +12 -4
- data/lib/foreman/engine/cli.rb +4 -4
- data/lib/foreman/env.rb +1 -1
- data/lib/foreman/export/base.rb +1 -1
- data/lib/foreman/process.rb +1 -2
- data/lib/foreman/procfile.rb +1 -1
- data/lib/foreman/version.rb +1 -1
- data/man/foreman.1 +2 -2
- data/spec/foreman/export/upstart_spec.rb +1 -1
- data/spec/resources/export/supervisord/app-alpha-1.conf +2 -2
- data/spec/resources/export/supervisord/app-alpha-2.conf +2 -2
- data/spec/spec_helper.rb +0 -2
- metadata +13 -5
data/lib/foreman.rb
CHANGED
@@ -8,8 +8,8 @@ module Foreman
|
|
8
8
|
File.expand_path("../../bin/foreman-runner", __FILE__)
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.
|
12
|
-
defined?(RUBY_PLATFORM) and RUBY_PLATFORM == "java"
|
11
|
+
def self.jruby_18?
|
12
|
+
defined?(RUBY_PLATFORM) and RUBY_PLATFORM == "java" and ruby_18?
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.ruby_18?
|
data/lib/foreman/capistrano.rb
CHANGED
@@ -12,7 +12,7 @@ if defined?(Capistrano)
|
|
12
12
|
set :foreman_procfile, "Procfile"
|
13
13
|
set :foreman_app, application
|
14
14
|
set :foreman_user, user
|
15
|
-
set :foreman_log,
|
15
|
+
set :foreman_log, 'shared_path/log'
|
16
16
|
set :foreman_concurrency, false
|
17
17
|
DESC
|
18
18
|
task :export, :roles => :app do
|
data/lib/foreman/cli.rb
CHANGED
@@ -23,6 +23,7 @@ class Foreman::CLI < Thor
|
|
23
23
|
method_option :env, :type => :string, :aliases => "-e", :desc => "Specify an environment file to load, defaults to .env"
|
24
24
|
method_option :formation, :type => :string, :aliases => "-m", :banner => '"alpha=5,bar=3"'
|
25
25
|
method_option :port, :type => :numeric, :aliases => "-p"
|
26
|
+
method_option :timeout, :type => :numeric, :aliases => "-t", :desc => "Specify the amount of time (in seconds) processes have to shudown gracefully before receiving a SIGKILL, defaults to 5."
|
26
27
|
|
27
28
|
class << self
|
28
29
|
# Hackery. Take the run method away from Thor so that we can redefine it.
|
data/lib/foreman/engine.rb
CHANGED
@@ -25,6 +25,7 @@ class Foreman::Engine
|
|
25
25
|
@options = options.dup
|
26
26
|
|
27
27
|
@options[:formation] ||= (options[:concurrency] || "all=1")
|
28
|
+
@options[:timeout] ||= 5
|
28
29
|
|
29
30
|
@env = {}
|
30
31
|
@mutex = Mutex.new
|
@@ -37,6 +38,9 @@ class Foreman::Engine
|
|
37
38
|
# Start the processes registered to this +Engine+
|
38
39
|
#
|
39
40
|
def start
|
41
|
+
# Make sure foreman is the process group leader.
|
42
|
+
Process.setpgrp unless Foreman.windows?
|
43
|
+
|
40
44
|
trap("TERM") { puts "SIGTERM received"; terminate_gracefully }
|
41
45
|
trap("INT") { puts "SIGINT received"; terminate_gracefully }
|
42
46
|
trap("HUP") { puts "SIGHUP received"; terminate_gracefully } if ::Signal.list.keys.include? 'HUP'
|
@@ -109,7 +113,7 @@ class Foreman::Engine
|
|
109
113
|
end
|
110
114
|
else
|
111
115
|
begin
|
112
|
-
Process.kill "-#{signal}", Process.
|
116
|
+
Process.kill "-#{signal}", Process.getpgrp
|
113
117
|
rescue Errno::ESRCH, Errno::EPERM
|
114
118
|
end
|
115
119
|
end
|
@@ -275,8 +279,12 @@ private
|
|
275
279
|
loop do
|
276
280
|
io = IO.select(@readers.values, nil, nil, 30)
|
277
281
|
(io.nil? ? [] : io.first).each do |reader|
|
278
|
-
|
279
|
-
|
282
|
+
if reader.eof?
|
283
|
+
@readers.delete_if { |key, value| value == reader }
|
284
|
+
else
|
285
|
+
data = reader.gets
|
286
|
+
output_with_mutex name_for(@readers.invert[reader]), data
|
287
|
+
end
|
280
288
|
end
|
281
289
|
end
|
282
290
|
rescue Exception => ex
|
@@ -305,7 +313,7 @@ private
|
|
305
313
|
system "sending SIGTERM to all processes"
|
306
314
|
killall "SIGTERM"
|
307
315
|
end
|
308
|
-
Timeout.timeout(
|
316
|
+
Timeout.timeout(options[:timeout]) do
|
309
317
|
watch_for_termination while @running.length > 0
|
310
318
|
end
|
311
319
|
rescue Timeout::Error
|
data/lib/foreman/engine/cli.rb
CHANGED
@@ -44,8 +44,8 @@ class Foreman::Engine::CLI < Foreman::Engine
|
|
44
44
|
|
45
45
|
end
|
46
46
|
|
47
|
-
FOREMAN_COLORS = %w( cyan yellow green magenta red blue
|
48
|
-
|
47
|
+
FOREMAN_COLORS = %w( cyan yellow green magenta red blue bright_cyan bright_yellow
|
48
|
+
bright_green bright_magenta bright_red bright_blue )
|
49
49
|
|
50
50
|
def startup
|
51
51
|
@colors = map_colors
|
@@ -54,7 +54,7 @@ class Foreman::Engine::CLI < Foreman::Engine
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def output(name, data)
|
57
|
-
data.to_s.
|
57
|
+
data.to_s.lines.map(&:chomp).each do |message|
|
58
58
|
output = ""
|
59
59
|
output += $stdout.color(@colors[name.split(".").first].to_sym)
|
60
60
|
output += "#{Time.now.strftime("%H:%M:%S")} #{pad_process_name(name)} | "
|
@@ -89,7 +89,7 @@ private
|
|
89
89
|
@names.values.each_with_index do |name, index|
|
90
90
|
colors[name] = FOREMAN_COLORS[index % FOREMAN_COLORS.length]
|
91
91
|
end
|
92
|
-
colors["system"] = "
|
92
|
+
colors["system"] = "bright_white"
|
93
93
|
colors
|
94
94
|
end
|
95
95
|
|
data/lib/foreman/env.rb
CHANGED
@@ -5,7 +5,7 @@ class Foreman::Env
|
|
5
5
|
attr_reader :entries
|
6
6
|
|
7
7
|
def initialize(filename)
|
8
|
-
@entries = File.read(filename).split("\n").inject({}) do |ax, line|
|
8
|
+
@entries = File.read(filename).gsub("\r\n","\n").split("\n").inject({}) do |ax, line|
|
9
9
|
if line =~ /\A([A-Za-z_0-9]+)=(.*)\z/
|
10
10
|
key = $1
|
11
11
|
case val = $2
|
data/lib/foreman/export/base.rb
CHANGED
data/lib/foreman/process.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require "foreman"
|
2
|
-
require "rubygems"
|
3
2
|
|
4
3
|
class Foreman::Process
|
5
4
|
|
@@ -53,7 +52,7 @@ class Foreman::Process
|
|
53
52
|
Dir.chdir(cwd) do
|
54
53
|
Process.spawn env, expanded_command(env), :out => output, :err => output
|
55
54
|
end
|
56
|
-
elsif Foreman.
|
55
|
+
elsif Foreman.jruby_18?
|
57
56
|
require "posix/spawn"
|
58
57
|
wrapped_command = "#{Foreman.runner} -d '#{cwd}' -p -- #{command}"
|
59
58
|
POSIX::Spawn.spawn env, wrapped_command, :out => output, :err => output
|
data/lib/foreman/procfile.rb
CHANGED
data/lib/foreman/version.rb
CHANGED
data/man/foreman.1
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
3
|
.
|
4
|
-
.TH "FOREMAN" "1" "
|
4
|
+
.TH "FOREMAN" "1" "January 2013" "Foreman 0.61.0" "Foreman Manual"
|
5
5
|
.
|
6
6
|
.SH "NAME"
|
7
7
|
\fBforeman\fR \- manage Procfile\-based applications
|
@@ -90,7 +90,7 @@ Specify the user the application should be run as\. Defaults to the app name
|
|
90
90
|
These options control all modes of foreman\'s operation\.
|
91
91
|
.
|
92
92
|
.TP
|
93
|
-
\fB\-d\fR, \fB\-\-
|
93
|
+
\fB\-d\fR, \fB\-\-root\fR
|
94
94
|
Specify an alternate application root\. This defaults to the directory containing the Procfile\.
|
95
95
|
.
|
96
96
|
.TP
|
@@ -38,7 +38,7 @@ describe Foreman::Export::Upstart, :fakefs do
|
|
38
38
|
engine.env['KEY'] = 'd"\|d'
|
39
39
|
upstart.export
|
40
40
|
"foobarfoo".should include "bar"
|
41
|
-
File.read("/tmp/init/app-alpha-1.conf").should =~ /KEY=
|
41
|
+
File.read("/tmp/init/app-alpha-1.conf").should =~ /KEY=d\\"\\\\\\\|d/
|
42
42
|
end
|
43
43
|
|
44
44
|
context "with a formation" do
|
@@ -8,7 +8,7 @@ stdout_logfile=/var/log/app/alpha-1.log
|
|
8
8
|
stderr_logfile=/var/log/app/alpha-1.error.log
|
9
9
|
user=app
|
10
10
|
directory=/tmp/app
|
11
|
-
environment=PORT=
|
11
|
+
environment=PORT=5000
|
12
12
|
[program:app-bravo-1]
|
13
13
|
command=./bravo
|
14
14
|
autostart=true
|
@@ -18,7 +18,7 @@ stdout_logfile=/var/log/app/bravo-1.log
|
|
18
18
|
stderr_logfile=/var/log/app/bravo-1.error.log
|
19
19
|
user=app
|
20
20
|
directory=/tmp/app
|
21
|
-
environment=PORT=
|
21
|
+
environment=PORT=5100
|
22
22
|
|
23
23
|
[group:app]
|
24
24
|
programs=app-alpha-1,app-bravo-1
|
@@ -8,7 +8,7 @@ stdout_logfile=/var/log/app/alpha-1.log
|
|
8
8
|
stderr_logfile=/var/log/app/alpha-1.error.log
|
9
9
|
user=app
|
10
10
|
directory=/tmp/app
|
11
|
-
environment=PORT=
|
11
|
+
environment=PORT=5000
|
12
12
|
[program:app-alpha-2]
|
13
13
|
command=./alpha
|
14
14
|
autostart=true
|
@@ -18,7 +18,7 @@ stdout_logfile=/var/log/app/alpha-2.log
|
|
18
18
|
stderr_logfile=/var/log/app/alpha-2.error.log
|
19
19
|
user=app
|
20
20
|
directory=/tmp/app
|
21
|
-
environment=PORT=
|
21
|
+
environment=PORT=5001
|
22
22
|
|
23
23
|
[group:app]
|
24
24
|
programs=app-alpha-1,app-alpha-2
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.61.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
16
|
-
requirement: &
|
16
|
+
requirement: &70365748678500 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 0.13.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70365748678500
|
25
25
|
description: Process manager for applications with multiple components
|
26
26
|
email: ddollar@gmail.com
|
27
27
|
executables:
|
@@ -112,7 +112,8 @@ files:
|
|
112
112
|
- spec/spec_helper.rb
|
113
113
|
- man/foreman.1
|
114
114
|
homepage: http://github.com/ddollar/foreman
|
115
|
-
licenses:
|
115
|
+
licenses:
|
116
|
+
- MIT
|
116
117
|
post_install_message:
|
117
118
|
rdoc_options: []
|
118
119
|
require_paths:
|
@@ -123,12 +124,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
123
124
|
- - ! '>='
|
124
125
|
- !ruby/object:Gem::Version
|
125
126
|
version: '0'
|
127
|
+
segments:
|
128
|
+
- 0
|
129
|
+
hash: -555731677755334112
|
126
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
131
|
none: false
|
128
132
|
requirements:
|
129
133
|
- - ! '>='
|
130
134
|
- !ruby/object:Gem::Version
|
131
135
|
version: '0'
|
136
|
+
segments:
|
137
|
+
- 0
|
138
|
+
hash: -555731677755334112
|
132
139
|
requirements: []
|
133
140
|
rubyforge_project:
|
134
141
|
rubygems_version: 1.8.11
|
@@ -136,3 +143,4 @@ signing_key:
|
|
136
143
|
specification_version: 3
|
137
144
|
summary: Process manager for applications with multiple components
|
138
145
|
test_files: []
|
146
|
+
has_rdoc:
|