web-dev-qa-db-fra.com

Application de débogage exécutée à l'aide de pm2

L'application est gérée par

pm2 start app.js

ou

pm2 start config.json

Je veux déboguer mon application localement en utilisant node_inspector. J'ai ajouté l'argument debug

pm2 start --node-args="--debug=7000" app.js

Cela fonctionne bien, mais si je fournis config.json au lieu du script app.js, je ne sais pas comment passer des arguments concernant le débogage. Le morceau suivant de configuration ne fonctionne pas

{
  "apps": [
    {
      "name": "myName",
      "script": "app.js",
      "args": "['--debug=7000']"
      ............
      }
    ]
}

Alors, comment déboguer une application exécutée par pm2 et utilisant config?

20
Nawa

Vous y êtes presque, utilisez node_args au lieu de args:

  • args sont vos arguments de script
  • node_args sont des arguments qui sont passés à l'exécutable du noeud

    {
      "name": "myName",
      "script": "app.js",
      "node_args": ["--debug=7000"]
    }
    

schéma PM2 json .

Si quelqu'un a toujours des problèmes avec le paramètre de débogage après cela, dans certains cas, vous devez désactiver le mode cluster pour que le paramètre de débogage soit effectif.

Notez également que vous n'avez pas besoin des crochets dans la valeur node_args si vous transmettez tous les arguments en tant que chaîne unique.

39
soyuka

[pm2 version 3.2.2] 

Ce qui suit fonctionnerait si vous voulez attacher Vscode avec PM2.

Dans le fichier de l'écosystème, nomméosystos.config.js, ajoutez la ligne suivante sous applications.

node_args : ["--inspect"]

Ajouter ceci définirait automatiquement deux arguments de nœud lors de l'appel des scripts. Ils sont --inspect, --inspect-port=9232.

Ils peuvent être vus avec console.log(process.process.execArgv)

De même, si le nombre d'instances est> 1, l'argument ci-dessus continuerait à incrémenter ce numéro de port pour chaque autre instance de nœud sous ce pm2.

par exemple, pour la deuxième instance de noeud, pm2 transmettrait --inspect, --inspect-port=9233

Dans le cas où vous définissez explicitement inspect-port sur une valeur, je vois ce qui suit sous la forme args --inspect, --inspect-port=9200, --inspect-port=9230

Et il ne semble pas utiliser le port que vous vouliez. Mais je pense que vu la nature de pm2, il vaut peut-être mieux ne pas utiliser un port spécifique.

J'espère que cela t'aides.

1