这是我的代码(How do I temporarily redirect stderr in 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
但是我有一个问题,只有在puma停止(Ctrl + C)之后,文件中才会填充代码。 我可能应该关闭文件吗?但是我不知道该怎么做。我所有尝试关闭文件的尝试都以“日志写入失败,关闭流” 或“未授予任何阻止(让步)” 结束。 我寻求建议。
答案 0 :(得分:0)
看起来像您想在异常之后填充文件。 您应该查看Capturing Ctrl-c in ruby并在此处应用此解决方案,例如:
$orig_stdout = $stdout.dup
$stdout.reopen(File.new('log', 'w'))
trap("SIGINT") { throw :puma_exited }
catch(:puma_exited)
$stdout.close
$stdout = orig
end
我没有测试它,但是看起来它正是您要寻找的