Nodemon: إعادة التشغيل مع فشل علامة --inspect مع وجود خطأ في استخدام المنفذ

تم إنشاؤها على ١٤ مايو ٢٠١٨  ·  21تعليقات  ·  مصدر: remy/nodemon

  • nodemon -v : 1.17.4
  • node -v : v10.1.0
  • نظام التشغيل / بيئة المحطة الطرفية: إصدار Linux 4.9.87-linuxkit-aufs (root @ 70f48253c8b4) (إصدار مجلس التعاون الخليجي 6.4.0 (Alpine 6.4.0))
  • الأمر الذي قمت بتشغيله: nodemon --expose-gc --inspect=0.0.0.0:9228 --legacy-watch --delay 250ms --watch webpack.config.js node_modules/.bin/webpack-dev-server --mode development --host 0.0.0.0 --port 80

سلوك متوقع

عند تغيير ملف ، يجب إعادة تشغيل تطبيق العقدة ، باتباع الخطوات التالية "إيقاف التطبيق الحالي ؛ بدء مثيل جديد للتطبيق"

السلوك الفعلي

إنه يبدأ التطبيق قبل انتهاء المثيل السابق للتوقف ، ما يجعله يفشل ويعرض الخطأ التالي:

[nodemon] starting `node --expose-gc --inspect=0.0.0.0:9228 node_modules/.bin/webpack-dev-server --mode development --host 0.0.0.0 --port 80 src/index.js`
Starting inspector on 0.0.0.0:9228 failed: address already in use
[nodemon] app crashed - waiting for file changes before starting...

إذا تم تغيير أي ملف تمت مراقبته ، فسيتم إعادة تشغيله مرة أخرى وسيعمل لأنه سيكون وقتًا كافيًا لإيقاف مثيل التطبيق.

خطوات التكاثر

ابدأ مشروعًا بسيطًا باستخدام webpack-dev-server ، بابل وتفاعل ، ثم أضف دمية src/index.js لتهيئة رد الفعل لجعل العملية أبطأ قليلاً لخادم webpack-dev-server.
ابدأ nodemon باستخدام الأمر المتوفر.
تنفيذ: touch webpack.config.js قد يفشل إذا لم يكن جهاز الكمبيوتر الخاص بك سريعًا بما يكفي لإيقاف المثيل قبل بدء المثال التالي.

اقتراح

استمع إلى PID ليكون ميتًا قبل بدء مثيل جديد باستخدام مهلة أو فاصل زمني عند إضافة علامة --inspector إلى nodemon ، للتأكد من أن جميع الموارد متاحة قبل بدء مثيل جديد.


إذا كان ذلك ممكنًا ، يرجى إلحاق علامة --dump في الأمر الخاص بك وتضمين الإخراج هنا لضمان إزالة أي تفاصيل أو رموز حساسة / شخصية .

needs more info

التعليق الأكثر فائدة

أواجه نفس المشكلة
من # 1050 جربت الحل البديل لذلك التعليق

nodemon --delay 80ms --exec 'fuser -k 56745/tcp; node --inspect=0.0.0.0:56745 ./app/http.js'

استبدال Kill-port بالصهر

ال 21 كومينتر

يرجى تقديم git repo للنسخ منه. لن أخمن في تكوين الحزمة (وقد استخدمت الفحص باستخدام nodemon بنجاح ، لذا فإن التكوين هو ما أسعى إليه).

أيضًا ، إذا كان لديك اقتراح ، فمن الأفضل تزويد العلاقات العامة باختبار يوضح أنه يعمل ، فسيكون ذلك بالتأكيد 👍

سأفكر كيف يمكنني إنشاء مشروع منفصل يمكن استخدامه لإعادة إنتاج ذلك ، ولكن يبدو أنه يمثل تحديًا كبيرًا ، هنا يمكنني إعادة إنتاج حاويات عامل الإرساء حيث يمكنني تقليل الموارد المتاحة من جهاز الكمبيوتر الخاص بي لتنفيذ التطبيق.

ربما ستتمكن من تصحيح أخطاء مشروعك مباشرةً (وأظن أن هناك شيئًا مميزًا حول المشروع يسبب المشكلة ، لكنني أعلم أن الآخرين قد رأوا شيئًا مشابهًا بشكل غامض ، لكنهم لم يتمكنوا من التكرار).

يمكنك أيضًا استخدام DEBUG=nodemon* للحصول على مزيد من المعلومات ، وإذا لزم الأمر ، يمكنني إجراء بعض إصدار تصحيح الأخطاء للمساعدة في الوصول إلى سبب المشكلة (أشك في طريقة kill في run.js ملف)

أرى أيضًا هذا الخطأ بشكل عشوائي ، أثناء استخدام nodemon داخل حاوية Docker. الخطأ عشوائي تمامًا ، لست قادرًا على إنشاء سيناريو repro.

حاولت إضافة DEBUG=nodemon* env داخل الحاوية ، ثم تسببت في إعادة تشغيل قليلة حتى تلقيت خطأ.

هذا هو سجل إعادة التشغيل الناجحة:

my_container_1           | Thu, 24 May 2018 15:30:32 GMT nodemon bus emit: restart
my_container_1           | [nodemon] restarting due to changes...
my_container_1           | Thu, 24 May 2018 15:30:33 GMT nodemon bus.emit(exit) via SIGUSR2
my_container_1           | [nodemon] starting `node --inspect=0.0.0.0:7005 src/index.js`
my_container_1           | Thu, 24 May 2018 15:30:33 GMT nodemon bus emit: exit
my_container_1           | Thu, 24 May 2018 15:30:33 GMT nodemon spawning node --inspect=0.0.0.0:7005 src/index.js
my_container_1           | Thu, 24 May 2018 15:30:33 GMT nodemon bus new listener: exit (1)
my_container_1           | Thu, 24 May 2018 15:30:33 GMT nodemon start watch on: ./,../shared/
my_container_1           | Thu, 24 May 2018 15:30:33 GMT nodemon:watch early exit on watch, still watching (2)
my_container_1           | Debugger listening on port 7005.
my_container_1           | Warning: This is an experimental feature and could change at any time.
my_container_1           | To start debugging, open the following URL in Chrome:
my_container_1           |     chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2...

هذا هو سجل الفشل:

my_container_1           | [nodemon] restarting due to changes...
my_container_1           | Thu, 24 May 2018 15:30:47 GMT nodemon bus emit: restart
my_container_1           | Thu, 24 May 2018 15:30:47 GMT nodemon bus.emit(exit) via SIGUSR2
my_container_1           | Thu, 24 May 2018 15:30:47 GMT nodemon bus emit: exit
my_container_1           | [nodemon] starting `node --inspect=0.0.0.0:7005 src/index.js`
my_container_1           | Thu, 24 May 2018 15:30:47 GMT nodemon spawning node --inspect=0.0.0.0:7005 src/index.js
my_container_1           | Thu, 24 May 2018 15:30:47 GMT nodemon bus new listener: exit (1)
my_container_1           | Thu, 24 May 2018 15:30:47 GMT nodemon start watch on: ./,../shared/
my_container_1           | Thu, 24 May 2018 15:30:47 GMT nodemon:watch early exit on watch, still watching (2)
my_container_1           | Unable to open devtools socket: address already in use
my_container_1           | [nodemon] app crashed - waiting for file changes before starting...

اسمحوا لي أن أعرف إذا كان بإمكاني تقديم المزيد من المساعدة.

ربما تكون إعادة محاولة النشر حتى يتوفر المنفذ حلاً جيدًا حتى نجد المشكلة التي تتسبب في أن المنفذ قيد الاستخدام لفترة أطول ثم ينبعث bus: exit .

تم وضع علامة على هذه المشكلة تلقائيًا على أنها خاملة وقديمة لأنه لم يكن بها أي نشاط حديث. سيتم إغلاقها تلقائيًا في حالة عدم حدوث أي نشاط آخر. إذا كنت تعتقد أن هذا خطأ ، أو استمرت المشكلة ، فما عليك سوى إرسال رد في التعليقات و remy سوف (حاول!) للمتابعة.
شكرا لك على المساهمة <3

أواجه هذا أيضًا داخل حاوية Docker (Docker for Windows)

مرحبًا remy ، أواجه هذه المشكلة أيضًا بالإضافة إلى الآخرين

العقدة: 9.10.1
نانومتر: 6.1.0
Nodemon: 1.17.5
نظام التشغيل: Windows 10
الأمر الذي قمت بتشغيله: تطبيق nodemon

إليك رابط الريبو الخاص بي: https://github.com/AlexanderYW/uptime
أنا أتلقى الخطأ في هذا

أواجه نفس المشكلة
من # 1050 جربت الحل البديل لذلك التعليق

nodemon --delay 80ms --exec 'fuser -k 56745/tcp; node --inspect=0.0.0.0:56745 ./app/http.js'

استبدال Kill-port بالصهر

هل يمكننا وضع علامة على هذا على أنه عمل حوله (أشك في حقيقة أنه nodemon plus node بالإضافة إلى بروتوكول مصحح الأخطاء بالإضافة إلى docker plus host system - قد يجعل البداية مثل تصحيح الأخطاء أمرًا صعبًا - بالتأكيد لم يقدم أحد أي علاقات عامة ، لذلك أعتقد أنني حق في ذلك).

يسعدني إضافة هذا إلى الأسئلة الشائعة أيضًا.

(أضيف إلى الأسئلة الشائعة)

إليك إعادة شراء تكرر هذه المشكلة: https://github.com/darkobits/nodemon-restart-issue.

يبدو أن Nodemon لا ينتظر إنهاء العملية القديمة تمامًا قبل بدء عملية جديدة ، ولكن _ فقط_ عندما يكون في حاوية Docker و _ فقط_ عندما يكون وضع التصحيح نشطًا.

لكي نكون واضحين: يتسبب وجود --inspect _does_ في تعطل العملية الجديدة على الفور لأنها تحاول فتح خادم على نفس المنفذ الذي لا يزال قيد الاستخدام من قبل العملية السابقة ، ولكن هذا مجرد أثر جانبي لـ هذه المسألة. ستلاحظ أنه حتى في حاوية Docker ، إذا تمت إزالة العلامة --inspect ، فإن Nodemon ينتظر بشكل صحيح إنهاء العملية القديمة ، ولكن عندما يتم استخدام --inspect داخل الحاوية ، Nodemon _لا ينتظر لعملية الخروج.

آمل أن يساعد هذا.


PS - لريمي والمساهمين الآخرين في هذا المشروع الرائع. 😸

darkobits ، من الأفضل أن تبدأ إصدارًا جديدًا لما تراه (مفيد بشكل خاص لأن لديك ريبو لتنسخه). أفضل العمل مع المشكلات الجديدة (خاصةً عندما يكون هناك مجموعة من الوقت منذ إغلاق النتائج الجديدة والإبلاغ عنها).

شكرا مرة أخرى على الريبو لتكرار 👍

يحدث هذا لي خارج عامل الإرساء: https://github.com/nomcopter/nodemon-no-wait-repro

أدت إضافة "signal": "SIGINT" إلى nodemon.json إلى إصلاح هذا الأمر بالنسبة لي

Christilut عند إضافة إشارة SIGINT إلى nodemon.json تستمر في إعادة التشغيل ، تختفي الأخطاء ولكن هذا أيضًا ليس حلاً جيدًا. هل لديك أي فكرة لماذا إشارة التوقيع يمكن أن تسبب هذا؟

لا توجد فكرة ولكن هذا هو التكوين الكامل الذي أستخدمه ، ربما يساعد:

nodemon.json

{
  "restartable": "rs",
  "ignore": [
    ".git",
    "node_modules/**/node_modules"
  ],
  "verbose": false,
  "execMap": {
    "ts": "node --require ts-node/register"
  },
  "watch": [
    "server/",
    "config/"
  ],
  "ext": "json,ts",
  "signal": "SIGINT"
}

ابدأ بـ (كبرنامج نصي NPM): nodemon --inspect server/index.ts

لذا عملت الحيلة مع وحدة المصهر كيندا بالنسبة لي ،
لكنها لا تزال في بعض الأحيان لا تنجح في قتل العملية قبل بدء عملية جديدة.
لذلك قمت بحلها باستخدام حلقة while loop للتأكد من أننا لا نمضي قدمًا حتى تنتهي العملية القديمة بالتأكيد.

هذا هو الحل الخاص بي:

nodemon --delay 100ms --exec 'while [ -n "$(fuser -k 9229/tcp)" ]; do sleep 0.1; done; node --inspect=0.0.0.0:9229 ./src/app.js'

أتأمل ان يساعد هذا احدهم في المستقبل

من الغريب أن يؤدي تغيير الإشارة إلى SIGINT إلى حل المشكلة أيضًا. ليس لدي عامل تشغيل في هذا المزيج.

بعد استخدام SIGINT ، تتم إعادة تشغيل nodemon ولكن لا يمكن إنهاء العملية عند إرفاق مصحح الأخطاء وإيقاف العملية مؤقتًا (أي أن المستخدم يتنقل حاليًا عبر الرمز):

image

تكوين package.json الخاص بي:

    "start:dev": "nodemon --exec node --inspect=0.0.0.0:5860 ."
  },
  "nodemonConfig": {
    "ignore": [
      ".git",
      "cache/*",
      "logs/*"
    ],
    "env": {
      "NODE_ENV": "test"
    },
    "signal": "SIGINT",
    "verbose": true
  },
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

binarykitchen picture binarykitchen  ·  5تعليقات

ehmicky picture ehmicky  ·  4تعليقات

fabianMendez picture fabianMendez  ·  4تعليقات

piton13 picture piton13  ·  3تعليقات

remy picture remy  ·  5تعليقات