1 votes

Comment puis-je forcer une application node.js à se relancer après que la connexion à la base de données ait été interrompue ?

J'utilise forever pour faire fonctionner ma plateforme de blog Ghost au dessus de node.js. Si j'ai bien compris, forever doit surveiller la chute du nœud et le redémarrer automatiquement. Cependant, si j'arrache la base de données de l'application, elle ne se rétablit pas comme prévu lorsque la base de données redevient disponible. Les logs suivent :

r31c.log:Error: Connection lost: The server closed the connection.
r31c.log:error: Forever detected script exited with code: 8
r31c.log:error: Forever restarting script for 1 time
r31c.log:ERROR: connect ECONNREFUSED, sql: create table `posts` (`id` int(11) unsigned  
                not null not null auto_increment primary key, `uuid` varchar(36) not   
                null, `title` varchar(150) not null, `slug` varchar(150) not null, 
                `markdown` text, `html` text, `image` text, `featured` tinyint(1) not 
                null default '0', `page` tinyint(1) not null default '0', `status` 
                varchar(150) not null default 'draft', `language` varchar(6) not null 
                default 'en_US', `meta_title` varchar(150), `meta_description` 
                varchar(200), `author_id` int(11) not null, `created_at` datetime not 
                null, `created_by` int(11) not null, `updated_at` datetime, 
                `updated_by` int(11), `published_at` datetime, `published_by` int(11)) 
                default character set utf8,alter table `posts` add unique 
                posts_slug_unique(`slug`), bindings: 
r31c.log:error: Forever detected script was killed by signal: null
r31c.log:          throw arguments[1]; // Unhandled 'error' event
r31c.log:Error: Cannot stop process that is not running.

2voto

fsoppelsa Points 457

Dans les environnements de production, je suggère fortement d'essayer d'utiliser Passager autonome plutôt que pour toujours, afin d'augmenter la robustesse et la fiabilité des instances :

https://github.com/phusion/passenger/wiki/Phusion-Passenger%3A-Node.js-tutorial#wiki-deploying_standalone

Si vous voulez toujours utiliser forever, vous pouvez patcher en écrivant un script qui vérifie si une instance de forever est en place, et si elle ne l'est pas, la démarrer.

La vérification de la connexion à la base de données devrait être une question d'application, cependant.

0 votes

Après avoir étudié la question, je penche pour le Passager. Je n'ai commencé que récemment à utiliser Passenger pour une application Ruby et je suis heureux d'apprendre qu'il est parfaitement capable d'agir comme middleware pour une application node.js également. Je vais probablement l'exécuter derrière Nginx puisque mes autres services l'utilisent déjà.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X