Compare commits

...
13 Commits
Author SHA1 Message Date
David Dollar 342d30bbb8 0.31.0 2012-01-04 12:16:51 -05:00
David Dollar 268dd6240e make fork more robust 2012-01-04 12:15:55 -05:00
David Dollar 9e60b3e1a4 remove unnecessary debug 2012-01-04 12:15:38 -05:00
David Dollar 1c6285f8af add more information when shutting down 2012-01-04 12:15:17 -05:00
David Dollar fff15bc627 Merge pull request #110 from lstoll/master
Different port range for each process type on 'foreman start'
2011-12-24 22:47:36 -08:00
Lincoln Stoll a66157d611 Use different port ranges for each process type 2011-12-25 15:46:21 +11:00
David Dollar fcfa913fb0 0.30.1 2011-12-23 08:48:34 -05:00
David Dollar fc438472f9 require thread for mutex 2011-12-23 08:48:17 -05:00
David Dollar fc95936327 0.30.0 2011-12-22 16:34:02 -05:00
David Dollar 0c27f78d46 compatibility with ruby 1.8 2011-12-22 16:33:49 -05:00
David Dollar 356c61f471 0.29.0 2011-12-22 01:03:11 -05:00
David Dollar dcff4da220 0.28.0.pre2 2011-12-08 17:59:40 -08:00
David Dollar 888520ee99 fix pipe error 2011-12-08 17:59:27 -08:00
5 changed files with 24 additions and 13 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
PATH PATH
remote: . remote: .
specs: specs:
foreman (0.28.0.pre1) foreman (0.31.0)
term-ansicolor (~> 1.0.5) term-ansicolor (~> 1.0.5)
thor (>= 0.13.6) thor (>= 0.13.6)
+4 -2
View File
@@ -7,6 +7,7 @@ require "tempfile"
require "timeout" require "timeout"
require "term/ansicolor" require "term/ansicolor"
require "fileutils" require "fileutils"
require "thread"
class Foreman::Engine class Foreman::Engine
@@ -57,7 +58,7 @@ private ######################################################################
procfile.entries.each do |entry| procfile.entries.each do |entry|
reader, writer = IO.pipe reader, writer = IO.pipe
entry.spawn(concurrency[entry.name], writer, @directory, @environment, base_port).each do |process| entry.spawn(concurrency[entry.name], writer, @directory, @environment, port_for(entry, 1, base_port)).each do |process|
running_processes[process.pid] = process running_processes[process.pid] = process
readers[process] = reader readers[process] = reader
end end
@@ -70,6 +71,7 @@ private ######################################################################
def kill_all(signal="SIGTERM") def kill_all(signal="SIGTERM")
running_processes.each do |pid, process| running_processes.each do |pid, process|
info "sending #{signal} to pid #{pid}"
Process.kill(signal, pid) rescue Errno::ESRCH Process.kill(signal, pid) rescue Errno::ESRCH
end end
end end
@@ -115,7 +117,7 @@ private ######################################################################
print "#{Time.now.strftime("%H:%M:%S")} #{pad_process_name(name)} | " print "#{Time.now.strftime("%H:%M:%S")} #{pad_process_name(name)} | "
print Term::ANSIColor.reset print Term::ANSIColor.reset
print message.chomp print message.chomp
puts puts ""
end end
def print(message=nil) def print(message=nil)
+14 -5
View File
@@ -16,7 +16,7 @@ class Foreman::Process
def run(pipe, basedir, environment) def run(pipe, basedir, environment)
Dir.chdir(basedir) do Dir.chdir(basedir) do
with_environment(environment.merge("PORT" => port.to_s)) do with_environment(environment.merge("PORT" => port.to_s)) do
run_process entry.command run_process entry.command, pipe
end end
end end
end end
@@ -27,10 +27,19 @@ class Foreman::Process
private private
def run_process(command) def fork_with_io(command)
io = IO.popen([Foreman.runner, replace_command_env(command)], "w+") reader, writer = IO.pipe
@pid = io.pid pid = fork do
trap("SIGTERM") { "got sigterm for %d" % @pid } trap("INT", "IGNORE")
$stdout.reopen writer
reader.close
exec Foreman.runner, replace_command_env(command)
end
[ reader, pid ]
end
def run_process(command, pipe)
io, @pid = fork_with_io(command)
output pipe, "started with pid %d" % @pid output pipe, "started with pid %d" % @pid
Thread.new do Thread.new do
until io.eof? until io.eof?
+1 -1
View File
@@ -1,5 +1,5 @@
module Foreman module Foreman
VERSION = "0.28.0.pre1" VERSION = "0.31.0"
end end
+4 -4
View File
@@ -24,8 +24,8 @@ describe "Foreman::Engine" do
describe "start" do describe "start" do
it "forks the processes" do it "forks the processes" do
write_procfile write_procfile
mock.instance_of(Foreman::Process).run_process("./alpha") mock.instance_of(Foreman::Process).run_process("./alpha", is_a(IO))
mock.instance_of(Foreman::Process).run_process("./bravo") mock.instance_of(Foreman::Process).run_process("./bravo", is_a(IO))
mock(subject).watch_for_output mock(subject).watch_for_output
mock(subject).watch_for_termination mock(subject).watch_for_termination
subject.start subject.start
@@ -34,8 +34,8 @@ describe "Foreman::Engine" do
it "handles concurrency" do it "handles concurrency" do
write_procfile write_procfile
engine = Foreman::Engine.new("Procfile",:concurrency => "alpha=2") engine = Foreman::Engine.new("Procfile",:concurrency => "alpha=2")
mock.instance_of(Foreman::Process).run_process("./alpha").twice mock.instance_of(Foreman::Process).run_process("./alpha", is_a(IO)).twice
mock.instance_of(Foreman::Process).run_process("./bravo") mock.instance_of(Foreman::Process).run_process("./bravo", is_a(IO))
mock(engine).watch_for_output mock(engine).watch_for_output
mock(engine).watch_for_termination mock(engine).watch_for_termination
engine.start engine.start