我在生产中遇到一个例外,它没有提供和堆栈跟踪信息。如何开始调试可能来自哪里?
Oct 25 16:26:17 socket-proxy app/web.1: Exception: RedisError: Disconnected (Redis::DisconnectedError)
Oct 25 16:26:17 socket-proxy app/web.1: 0x4af6ac: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x4ce900: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x4b553e: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x529d1c: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x518cb2: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x518064: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x521d82: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x51ed3b: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x5240e9: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x50b995: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x416209: ??? at ??
Oct 25 16:26:17 socket-proxy app/web.1: 0x0: ??? at ??
答案 0 :(得分:4)
Ruby dev在这里所以不确定为什么堆栈跟踪被神秘地打印出来,但是如果你正在寻找一些关于在哪里看的线索我会从这个类开始:
# Exception for errors that Redis returns.
class Redis::Error < Exception
def initialize(s)
super("RedisError: #{s}")
end
end
class Redis::DisconnectedError < Redis::Error
def initialize
super("Disconnected")
end
end
现在显然只是在crystal-redis存储库中出现异常似乎是在这个类中:
def receive_line
line = @socket.gets(chomp: false)
unless line
raise Redis::DisconnectedError.new
end
line.byte_slice(0, line.bytesize - 2)
end
查看使用它的方法receive_line
,在连接或Redis::Connection
方法期间,receive
显然会出现错误。
因此,无论是连接期间的错误,还是连接断开。
考虑到无能为力的堆栈跟踪,这将是一个良好的开端,除非您可以分享更多代码来查看。
希望有所帮助。
答案 1 :(得分:1)
这最终是因为生产服务器在一段时间后超时redis连接。我已切换到redis-reconnect
以自动重新连接。