Как временно перенаправить stderr в Ruby on Rails? - PullRequest
1 голос
/ 01 июля 2019

Это мой код (перекомпиляция Как временно перенаправить stderr в Ruby? (который не может быть использован из-за записи собственного расширения):

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

Но яесть проблема, файл заполняется кодом только после остановки пумы (Ctrl + C). Вероятно, я должен закрыть файл? Но я не понимаю, как это сделать. Все мои попытки закрыть конец файла как "запись не удалась. закрытый поток" или "блок не задан (выход)" . Прошу совета.

1 Ответ

0 голосов
/ 08 июля 2019

Похоже, вы хотите заполнить файл после исключения.Вы должны взглянуть на Захват Ctrl-c в ruby ​​ и применить это решение здесь, например:

 $orig_stdout = $stdout.dup
 $stdout.reopen(File.new('log', 'w'))

 trap("SIGINT") { throw :puma_exited }

catch(:puma_exited) 
   $stdout.close
   $stdout = orig
end

Я не проверял это, но похоже, что это то, что выищу

...