上下文:我正在构建一个非常长的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必须使用
答案 0 :(得分:0)
ActiveRecord异常就像普通异常一样,你可以处理它们,所以请尝试:
begin
sql = ActiveRecord::Base.connection.execute really_long_query
rescue => e
# do what ever you want to do with error
end
我现在无法尝试,但我想这对你有所帮助:)。