1

This is my code (recompilation of How do I temporarily redirect stderr in Ruby? (which can't be used because of native extension writes):

def silence_stdout(log = '/dev/null')
 orig = $stdout.dup
 $stdout.reopen(File.new(log, 'w'))
 begin
   yield
 ensure
   $stdout = orig
 end
end

silence_stdout('ttt.log') do
   #do something
end

But I have a problem, the file is filled with the code only after the puma stops (Ctrl + C). Probably should I close the file? But I do not understand how to do it. All my attempts to close the file end as "log writing failed. closed stream" or "no block given (yield)". I ask for advice.

Alex
  • 39
  • 1
  • 6

0 Answers0