Compare commits
13
Commits
v0.28.0.pre1
...
v0.31.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
342d30bbb8 | ||
|
|
268dd6240e | ||
|
|
9e60b3e1a4 | ||
|
|
1c6285f8af | ||
|
|
fff15bc627 | ||
|
|
a66157d611 | ||
|
|
fcfa913fb0 | ||
|
|
fc438472f9 | ||
|
|
fc95936327 | ||
|
|
0c27f78d46 | ||
|
|
356c61f471 | ||
|
|
dcff4da220 | ||
|
|
888520ee99 |
+1
-1
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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,5 +1,5 @@
|
|||||||
module Foreman
|
module Foreman
|
||||||
|
|
||||||
VERSION = "0.28.0.pre1"
|
VERSION = "0.31.0"
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user