Class: EY::Serverside::Spawner::Child
- Inherits:
-
Object
- Object
- EY::Serverside::Spawner::Child
- Defined in:
- lib/engineyard-serverside/spawner.rb
Instance Attribute Summary collapse
-
#stderr_fd ⇒ Object
readonly
Returns the value of attribute stderr_fd.
-
#stdout_fd ⇒ Object
readonly
Returns the value of attribute stdout_fd.
Instance Method Summary collapse
- #append_to_buffer(fd, data) ⇒ Object
- #close(fd) ⇒ Object
- #finished(status) ⇒ Object
-
#initialize(command, shell, server = nil) ⇒ Child
constructor
A new instance of Child.
- #ios ⇒ Object
- #result ⇒ Object
- #spawn ⇒ Object
Constructor Details
#initialize(command, shell, server = nil) ⇒ Child
Returns a new instance of Child.
97 98 99 100 101 102 |
# File 'lib/engineyard-serverside/spawner.rb', line 97 def initialize(command, shell, server = nil) @command = command @shell = shell @server = server @output = "" end |
Instance Attribute Details
#stderr_fd ⇒ Object (readonly)
Returns the value of attribute stderr_fd.
95 96 97 |
# File 'lib/engineyard-serverside/spawner.rb', line 95 def stderr_fd @stderr_fd end |
#stdout_fd ⇒ Object (readonly)
Returns the value of attribute stdout_fd.
95 96 97 |
# File 'lib/engineyard-serverside/spawner.rb', line 95 def stdout_fd @stdout_fd end |
Instance Method Details
#append_to_buffer(fd, data) ⇒ Object
156 157 158 159 160 161 162 163 164 165 |
# File 'lib/engineyard-serverside/spawner.rb', line 156 def append_to_buffer(fd,data) case fd when @stdout_fd @shell.command_out data @output << data when @stderr_fd @shell.command_err data @output << data end end |
#close(fd) ⇒ Object
148 149 150 151 152 153 154 |
# File 'lib/engineyard-serverside/spawner.rb', line 148 def close(fd) case fd when @stdout_fd then @stdout_fd = nil when @stderr_fd then @stderr_fd = nil end fd.close rescue true end |
#finished(status) ⇒ Object
136 137 138 |
# File 'lib/engineyard-serverside/spawner.rb', line 136 def finished(status) @status = status end |
#ios ⇒ Object
132 133 134 |
# File 'lib/engineyard-serverside/spawner.rb', line 132 def ios [@stdout_fd, @stderr_fd].compact end |
#result ⇒ Object
140 141 142 143 144 145 146 |
# File 'lib/engineyard-serverside/spawner.rb', line 140 def result if @status Result.new(@command, @status.success?, @output, @server) else raise "No result from unfinished child process" end end |
#spawn ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/engineyard-serverside/spawner.rb', line 104 def spawn @shell.command_show @command #stdin, @stdout_fd, @stderr_fd, @waitthr = Open3.popen3(@cmd) #stdin.close stdin_rd, stdin_wr = IO.pipe @stdout_fd, stdout_wr = IO.pipe @stderr_fd, stderr_wr = IO.pipe @pid = fork do stdin_wr.close @stdout_fd.close @stderr_fd.close STDIN.reopen(stdin_rd) STDOUT.reopen(stdout_wr) STDERR.reopen(stderr_wr) Kernel.exec(@command) raise "Exec failed!" end stdin_rd.close stdin_wr.close stdout_wr.close stderr_wr.close [@pid, @stdout_fd, @stderr_fd] end |