>上下文:我正在构造一个很长的sql字符串并使用ActiveRecord执行它。 失败时,它会记录错误(包括原始查询)并占用 5 页屏幕空间。 因为我已经捕获了异常,所以我不需要收到错误通知,它只会使日志记录混乱。 所有暂时关闭记录器或劫持IO流的尝试都是徒劳的。
问题:如何防止记录该异常?
示例:(我知道很多代码都是多余的,但我的观点是,即使全部都不起作用)
really_long_query = "select * from posts where ..."
ActiveRecord::Base.logger.level = 10
$stderr = $stdout = $stdin = STDOUT = STDERR = STDIN = IO.new(IO.sysopen('/dev/null', 'w+'))
silence_stream(STDOUT){
ActiveRecord::Base.connection.execute really_long_query # TURN LOGGING OFF FOR THIS LINE
} # => still logs the exception to the console, despite all the above code
我的结论:基于上述结果,我假设ActiveRecord一定在使用
- 不同的记录器和
- 第 3 行中未包含的流
ActiveRecord 异常就像普通异常一样,你可以处理它们,所以请尝试:
begin
sql = ActiveRecord::Base.connection.execute really_long_query
rescue => e
# do what ever you want to do with error
end
我现在无法尝试,但我想它可能对您有所帮助:)