PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Lorsque j'appelle DB::select, pourquoi reçois-je un message La connexion a été réinitialisée ?

La partie délicate de cela a été le refus obstiné du navigateur de révéler toute forme de message d'erreur. Lorsque cela se produit, j'aime aller à la ligne de commande et l'essayer, éliminant ainsi le serveur Web en tant que variable.

À partir du chat, nous avons appris que la ligne de commande affichait l'erreur comme prévu, mais ne l'a pas fait gracieusement :l'erreur a été générée et le script a été interrompu. Il s'agit d'un grave plantage, qui n'est pas attribuable au serveur Web.

Avec l'introduction de \Throwable , les scénarios où PHP a la vie dure deviennent de plus en plus rares. Donc, dans un effort pour rattraper le dernier souffle de PHP, nous avons implémenté une register_shutdown_function qui a tiré error_get_last dans le but de comprendre ce qui a été dit, le cas échéant, juste avant d'exploser.

Cela a révélé, brièvement, le message d'erreur dans le navigateur (cette fois en utilisant un navigateur différent). Cependant, ce n'était pas reproductible. L'insight à ce stade était la mise en cache :composer dump-autoload a résolu le problème !

Je suppose que ce qui s'est passé est ceci :

  • Eloquent a lancé une exception
  • PHP faisait bouillonner cela grâce aux classes de gestion des exceptions de Laravel
  • À un moment donné, PHP a tenté de charger une classe qui n'était pas dans le chargeur automatique
  • PHP s'est écrasé brutalement (c'est l'un de ces cas où PHP 7.0 tombe en panne)

En exécutant composer dump-autoload , toutes les classes "manquantes" ont été placées sous la responsabilité de l'autochargeur et, lors d'une nouvelle tentative, la séquence de code correcte s'est produite.