Form Trigger échoue en mode file d'attente - Impossible de lire les propriétés de undefined (lecture de 'execute')

Salut à tous !

J’exécute n8n 2.21.7 en mode queue (EXECUTIONS_MODE=queue) avec
PostgreSQL et Redis, hébergé sur Easypanel avec Docker.

J’ai construit un workflow utilisant un Form Trigger avec responseMode défini sur
‘lastNode’, suivi d’un nœud AI Agent (OpenAI), et un nœud Form
completion pour afficher le résultat à l’écran.

Le workflow fonctionne parfaitement quand je le teste manuellement dans l’éditeur.
Mais quand je soumets le formulaire en production, cela échoue immédiatement avec cette erreur :

« Cannot read properties of undefined (reading ‘execute’) »

Le truc bizarre, c’est que runData est complètement vide quand l’erreur
se produit — il semble échouer avant que n’importe quel nœud commence à s’exécuter.
La stack trace pointe vers bull@4.16.4 Queue.onFailed.

Tous mes autres workflows fonctionnent correctement en production. Le problème semble spécifique
au Form Trigger quand il doit garder la connexion ouverte en attendant
la réponse du dernier nœud.

J’ai déjà essayé de définir N8N_RUNNERS_ENABLED=false mais l’erreur persiste.

Quelqu’un a-t-il déjà rencontré ça ? Vous avez des idées sur ce qui pourrait causer le problème ?

Merci !

ce message d’erreur « Cannot read properties of undefined (reading ‘execute’) » apparaît avec différentes combinaisons de modes de file d’attente — "On form submission" trigger not working using the production URL · Issue #19317 · n8n-io/n8n · GitHub présente le même schéma pour les Form Triggers sur les URLs de production, et Postgres Node Fails in Queue Mode: “Cannot read properties of undefined (reading ‘execute’)” · Issue #15154 · n8n-io/n8n · GitHub l’a rencontré avec Postgres en mode file d’attente. #15154 a été fermé comme « non planifié » sans correctif, donc c’est un bug n8n ouvert, pas quelque chose de votre côté.

ça vaut le coup d’essayer comme contournement : changez le paramètre « Respond When » du Form Trigger de « Workflow Finishes » à « Form Is Submitted ». vous perdez l’affichage du résultat en direct sur la page du formulaire mais la réponse revient immédiatement à la soumission, ce qui évite ce que le transfert de file d’attente fait de travers. vous avez essayé ça ?

Salut @ricardo_balako

L’erreur que tu rencontres, « Cannot read properties of undefined (reading ‘execute’) », est un symptôme classique d’une panne de communication en mode queue de n8n. Puisque ton workflow fonctionne correctement dans l’éditeur mais échoue en production, le problème ne vient presque certainement pas de la logique de ton workflow lui-même, mais plutôt de la façon dont ton environnement distribué traite le job. En mode queue, l’instance principale envoie une tâche à un processus worker séparé, et si ce worker ne peut pas initialiser correctement le nœud requis, il crash avant même de pouvoir commencer l’exécution.

La cause la plus courante est un décalage de version entre ton instance principale et ton instance worker. Même si les deux semblent exécuter la dernière version, des différences subtiles dans les images Docker sous-jacentes peuvent les empêcher de communiquer correctement. Il est essentiel de s’assurer que les deux services utilisent explicitement exactement le même tag d’image et que tu effectues un redéploiement complet des deux composants simultanément pour t’assurer qu’ils sont synchronisés.

Un autre facteur critique est la cohérence de tes variables d’environnement dans toute ton infrastructure. Tes services principal et worker doivent partager exactement la même configuration, notamment en ce qui concerne la clé de chiffrement, les détails de connexion à la base de données et les paramètres Redis. Si le worker n’a pas la bonne configuration, il peut échouer à s’authentifier auprès de ta base de données ou de Redis, ce qui provoque l’erreur « undefined » quand il essaie de récupérer les données du workflow dont il a besoin pour démarrer le job.

Tu devrais aussi vérifier que ton service worker est configuré pour s’exécuter spécifiquement en tant que processus worker. Dans ta configuration Easypanel, confirme que la commande de ton conteneur worker est définie sur worker (par exemple, n8n worker). De plus, définir la variable d’environnement N8N_REINSTALL_MISSING_PACKAGES=true sur ton worker est une bonne pratique, car elle garantit que le worker dispose de toutes les dépendances nécessaires, comme celles requises par le nœud AI Agent, qui pourraient manquer dans un environnement worker vierge.

Le fait que l’erreur pointe vers bull (la bibliothèque de gestion de queue) confirme que la défaillance se produit au niveau de l’infrastructure. La meilleure façon de résoudre ce problème est d’ignorer les logs n8n principaux et de te concentrer exclusivement sur les logs du conteneur worker au moment exact où tu soumets le formulaire. Ces logs spécifiques au worker fourniront souvent la raison précise—comme un timeout de connexion ou une dépendance manquante—pour laquelle le job n’a pas pu s’initialiser.

Si tu as vérifié la version, la configuration et les logs et que le problème persiste, tu pourrais vouloir tester en définissant EXECUTIONS_PROCESS=main sur ton instance principale comme étape de diagnostic temporaire. Bien que cela contourne l’infrastructure worker, cela confirmera si le problème est strictement lié au système de queue. Si le workflow fonctionne correctement dans ce mode, cela confirme que ton problème est isolé à l’interaction entre ton instance n8n principale et les processus worker.

Bienvenue @ricardo_balako !

La cause première ici est architecturale : Form Trigger avec responseMode=lastNode nécessite que le processus n8n principal maintienne la connexion HTTP ouverte jusqu’à ce que le workflow se termine. En mode queue, l’exécution est confiée à un worker - et cette connexion ouverte ne peut pas la suivre au-delà de la limite des processus. Le Queue.onFailed dans votre stack trace confirme que le job échoue au niveau de la queue avant même qu’un nœud ne commence.

La correction la plus rapide est celle qu’achamm a suggérée - changez « Respond When » en « Form Is Submitted ». Si vous devez afficher le résultat de l’IA à l’utilisateur, un modèle courant consiste à le rediriger vers une page de résultat qui interroge un webhook ou vérifie un endpoint de statut.

Si vous avez vraiment besoin du mode lastNode, la seule option propre est d’exécuter ces workflows spécifiques en dehors du mode queue - soit avec EXECUTIONS_PROCESS=main sur la même instance (non recommandé à grande échelle), soit sur une instance n8n séparée sans mode queue activé.

À vérifier rapidement également : confirmez que votre conteneur worker est exactement en version 2.21.7 et partage la même N8N_ENCRYPTION_KEY - une incohérence à ce niveau produit exactement ce schéma d’échec.

Utile de confirmer ce qui avait déjà été suggéré : il s’agit d’un bug connu de n8n avec les déclencheurs de type formulaire/webhook en mode file d’attente, et non d’un problème dans votre flux de travail. Cela fonctionne dans l’éditeur car l’exécution manuelle s’effectue dans le processus principal, et échoue sur l’URL de production car en mode file d’attente, un worker la récupère et le contexte du déclencheur n’est pas câblé de la même manière.

Chemins pratiques en attendant la correction en amont. Si ce workflow particulier n’a pas besoin de l’extensibilité du mode file d’attente, lancez-le en mode d’exécution régulier (principal) et réservez le mode file d’attente aux flux de travail lourds. Si tout doit absolument fonctionner en mode file d’attente, une solution de contournement courante est de le diviser : un simple nœud Webhook recevant le post du formulaire (les webhooks se comportent mieux que le Form Trigger en mode file d’attente), puis traiter la réponse séparément plutôt que de compter sur responseMode lastNode à travers le nœud de formulaire.

Comme le problème GitHub associé a été fermé comme « non planifié », ne comptez pas sur une correction. Abonnez-vous pour rester informé, mais contournez le problème maintenant. Quelle version exacte de n8n utilisez-vous, au cas où il y aurait une fenêtre de régression à signaler.

Résolu ! Voici ce qui a fonctionné pour moi :

Le problème était exactement celui décrit par @kjooleng — une incompatibilité de version entre mes services n8n. Je suis en train d’exécuter n8n sur Easypanel avec trois services séparés : n8n_start, n8n_webhook et n8n_worker. Tous exécutaient des versions différentes de l’image Docker, ce qui causait l’arrêt de la communication de la file d’attente avant même qu’un nœud soit exécuté.

La correction était simple : j’ai mis à jour les trois services vers la même balise latest et redéployé tous les services simultanément. Après cela, tout a fonctionné parfaitement en production.

Conclusion principale : si vous exécutez n8n en mode queue avec des conteneurs séparés pour worker/webhook, assurez-vous que tous les services soient exactement à la même version. Même une petite différence entre l’instance principale et le worker suffit à déclencher cette erreur.

Merci à tous pour votre aide !