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.
102 103 104 105 106 107 |
# File 'lib/engineyard-serverside/spawner.rb', line 102 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.
100 101 102 |
# File 'lib/engineyard-serverside/spawner.rb', line 100 def stderr_fd @stderr_fd end |
#stdout_fd ⇒ Object (readonly)
Returns the value of attribute stdout_fd.
100 101 102 |
# File 'lib/engineyard-serverside/spawner.rb', line 100 def stdout_fd @stdout_fd end |
Instance Method Details
#append_to_buffer(fd, data) ⇒ Object
161 162 163 164 165 166 167 168 169 170 |
# File 'lib/engineyard-serverside/spawner.rb', line 161 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
153 154 155 156 157 158 159 |
# File 'lib/engineyard-serverside/spawner.rb', line 153 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
141 142 143 |
# File 'lib/engineyard-serverside/spawner.rb', line 141 def finished(status) @status = status end |
#ios ⇒ Object
137 138 139 |
# File 'lib/engineyard-serverside/spawner.rb', line 137 def ios [@stdout_fd, @stderr_fd].compact end |
#result ⇒ Object
145 146 147 148 149 150 151 |
# File 'lib/engineyard-serverside/spawner.rb', line 145 def result if @status Result.new(@command, @status.success?, @output, @server) else raise "No result from unfinished child process" end end |
#spawn ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/engineyard-serverside/spawner.rb', line 109 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 |