1
  • Laravel 版本:5.7.28
  • PHP版本:7.2.15
  • 数据库驱动程序和版本:MariaDB 10.2.23

我在使用 Horizo​​n 的生产服务器上遇到一个错误。

ErrorException: 警告: PDO::prepare(): MySQL server has gone away [internal] in unserialize

您可以在此处查看错误的堆栈跟踪:https ://sentry.io/share/issue/b105b7946b524a9e841f56f44445ea14/

据我所知,这个错误应该被 Laravel 框架捕获。我不确定为什么它没有被捕获并变成 QueryException ,然后会触发重新连接和/或杀死工人。

见:https ://github.com/laravel/framework/blob/9fb420cc29a7dd5de5051f09c523ffc3ea01b969/src/Illuminate/Database/Connection.php#L663

然后:https ://github.com/laravel/framework/blob/9fb420cc29a7dd5de5051f09c523ffc3ea01b969/src/Illuminate/Database/Connection.php#L735

我的理解是,任何异常都应该被捕获,然后作为 QueryException 重新抛出,然后由框架正确捕获,然后重新连接到数据库。

这是一个偶然的错误,因此很难重现;我试图手动抛出类似的错误,但它被正确捕获并正确处理。

任何关于为什么这个错误在生产中可能会有所不同的一般指导以及关于我如何隔离错误的想法都将不胜感激。

4

1 回答 1

0

万一其他人遇到这种情况,目前的理论是 Sentry 正在捕获框架仍在正确处理的错误。

本质上,作业仍然正确完成,因为 MySQL 连接错误由框架自动处理。然而,Sentry 仍然在该错误处理过程中发现了一个错误,尽管原因目前尚不清楚。

作为参考,请参阅 Github 上的讨论:

https://github.com/laravel/horizo​​n/issues/583

于 2019-07-22T15:44:44.773 回答