File tree Expand file tree Collapse file tree 2 files changed +16
-3
lines changed Expand file tree Collapse file tree 2 files changed +16
-3
lines changed Original file line number Diff line number Diff line change @@ -192,7 +192,6 @@ def serve(client)
192
192
}
193
193
194
194
disconnect_database
195
- reset_streams
196
195
197
196
log "forked #{ pid } "
198
197
manager . puts pid
@@ -209,6 +208,11 @@ def serve(client)
209
208
210
209
client . puts ( 1 ) if pid
211
210
client . close
211
+ ensure
212
+ # Redirect STDOUT and STDERR to prevent from keeping the original FDs
213
+ # (i.e. to prevent `spring rake -T | grep db` from hanging forever),
214
+ # even when exception is raised before forking (i.e. preloading).
215
+ reset_streams
212
216
end
213
217
214
218
def terminate
@@ -292,8 +296,11 @@ def with_pty
292
296
PTY . open do |master , slave |
293
297
[ STDOUT , STDERR , STDIN ] . each { |s | s . reopen slave }
294
298
Thread . new { master . read }
295
- yield
296
- reset_streams
299
+ begin
300
+ yield
301
+ ensure
302
+ reset_streams
303
+ end
297
304
end
298
305
end
299
306
Original file line number Diff line number Diff line change @@ -415,6 +415,12 @@ def exec_name
415
415
assert_failure "bin/rake -T" , stderr : "unable to find your config/application.rb"
416
416
end
417
417
418
+ test "piping with boot-level error" do
419
+ config = app . application_config . read
420
+ File . write ( app . application_config , "#{ config } \n omg" )
421
+ assert_success "bin/rake -T | cat"
422
+ end
423
+
418
424
test "piping" do
419
425
assert_success "bin/rake -T | grep db" , stdout : "rake db:migrate"
420
426
end
You can’t perform that action at this time.
0 commit comments