Php Laravel:如何配置eloqent在数据库超时时引发异常?
如果数据库不可用,则需要几秒钟的加载时间。然后日志显示了这个错误,这不应该触发异常处理程序吗?(其他错误按预期结束) 然后我看到“504网关超时服务器没有及时响应。”错误。如何配置eloquent以使数据库超时引发常规异常?(因此处理程序可以显示更吸引人的标准错误页面) 我尝试在config/database.php中将PDO选项设置为PDO::ERRMODE_EXCEPTION,然后在Php Laravel:如何配置eloqent在数据库超时时引发异常?,php,laravel,Php,Laravel,如果数据库不可用,则需要几秒钟的加载时间。然后日志显示了这个错误,这不应该触发异常处理程序吗?(其他错误按预期结束) 然后我看到“504网关超时服务器没有及时响应。”错误。如何配置eloquent以使数据库超时引发常规异常?(因此处理程序可以显示更吸引人的标准错误页面) 我尝试在config/database.php中将PDO选项设置为PDO::ERRMODE_EXCEPTION,然后在php artisan config:clear中设置,但没有成功 'mysql' =>
php artisan config:clear
中设置,但没有成功
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'forge'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
'options' => [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,]
],
出现
504网关超时
错误的原因是,当您使用不存在的数据库执行查询时,需要花费很长时间(我大约需要2分钟)
我怀疑web服务器或php配置的最大执行时间低于此值,因此会生成504网关超时
错误
有两种方法可以解决此问题:
增加服务器和PHP配置中的最大执行时间
通过调整服务器配置文件,增加服务器中的最大执行时间:
- Nginx:
- 阿帕奇:
max\u execution\u time
时间(确保更改web服务器使用的时间,而不仅仅是CLI)。或者在index.php的开头添加以下内容:
ini_set('max_execution_time', 1200); // 1200 seconds
减少PDO超时值
使用以下选项:
'options' => [PDO::ATTR_TIMEOUT=> 10, // timeout in seconds]
请注意,由于某些原因,实际超时通常大于指定的超时。我的测试表明,有10秒的超时,实际上是在40秒超时。20秒在80秒时超时。我不知道这是为什么。您的体验可能会有所不同。天哪,它奏效了!再次感谢,它的工作:)我祝你有一个伟大的一天!
'options' => [PDO::ATTR_TIMEOUT=> 10, // timeout in seconds]