Het probleem is opgelost nadat we begonnen met het herstellen van verbindingen met de database. We gebruikten sequel
op het project, en Passenger behandelt het probleem zelf alleen wanneer ActiveRecord wordt gebruikt.
Om het uit te breiden, gebruikt Passenger standaard slimme spawning voor ruby-apps. Het spawnt eerst het preloader-proces, dat het framework en alle bibliotheken laadt. Na dat preloader-proces spawnen werkprocessen wanneer dat nodig is, die de verzoeken afhandelen. Bij het spawnen van werkprocessen worden alle bestandsdescriptors overgenomen van het preloader-proces. Dus als u de verbinding met de database niet herstelt, delen alle werkprocessen er één, tot stand gebracht door de preloader. Wat tot allerlei raar gedrag leidt. Like-verzoeken duren te lang.
Daarvoor hebben we ook het afhandelen van WebSocket-verbindingen naar een apart proces verplaatst. Ik weet echter niet zeker of het heeft bijgedragen aan het probleem.
Hier meer over:
Verbinding verbreken bij gebruik van Forking-webserver met vooraf geladen code
Onbedoeld delen van bestandsdescriptoren
De Action Cable-server op dezelfde host en poort draaien, onder een sub-URI