حل المشكلات
المشكلات التي قد تواجهها أثناء تشغيل الموقع، وسبب كل منها، وطريقة إصلاحها.
المنفذ مستخدم بالفعل
ports are not available: exposing port TCP 0.0.0.0:3030 … bind: address already in use
Error: listen EADDRINUSE: address already in use :::3030السطر الأول من Docker، والثاني من yarn dev أو yarn start. هناك برنامج آخر يستمع بالفعل على 3030: غالبًا تشغيل سابق للموقع، أو خادم تطوير لمشروع آخر.
اعرف ما الذي يشغل المنفذ
على macOS أو Linux:
الطرفيةlsof -i :3030على Windows، في PowerShell:
الطرفيةnetstat -ano | findstr :3030أوقفه
أغلق ذلك البرنامج، أو أوقف التشغيل السابق: Ctrl+C في طرفيته، أو
docker stopمع اسم الحاوية أو معرّفها (يعرضهاdocker ps). ثم شغّل الموقع مرة أخرى.أو شغّل الموقع على منفذ آخر
مع Docker، غيّر الرقم الموجود على يسار
-pفقط؛ فالرقم الأيمن هو المنفذ داخل الحاوية ويبقى3030:الطرفيةفيjuicydocker run -p 3041:3030 juicyمن دون Docker:
الطرفيةفيjuicyyarn dev -p 3041لبناء الإنتاج،
yarn start -p 3041.النتيجة المتوقعة: يستجيب الموقع على localhost:3041محلي.
Docker لا يعمل
failed to connect to the docker API at unix:///…/docker.sock; check if the path is correct and if the daemon is runningتعرض إصدارات Docker الأقدم الرسالة "Cannot connect to the Docker daemon" بدلًا من ذلك. وفي الحالتين، محرك Docker غير مُشغَّل.
افتح Docker Desktop
شغّل Docker Desktop وانتظر حتى يُظهر أن المحرك يعمل. على Linux، شغّل الخدمة:
sudo systemctl start docker.تحقق من أن Docker يستجيب
الطرفيةdocker infoالنتيجة المتوقعة: يطبع قسم Server بدلًا من رسالة خطأ.
شغّل أمرك مرة أخرى
docker build -t juicy .، ثمdocker run -p 3030:3030 juicy.
فشل بناء Docker
يُنزّل البناء الأول صورة Node.js وكل الحزم، ثم يبني الموقع. ويتوقف برسالة "failed to solve" مع الخطوة التي فشلت عندما يعترضه شيء.
- لا اتصال أو انتهت المهلة: يحتاج البناء إلى الإنترنت. شغّل الأمر مرة أخرى بعد عودة الاتصال؛ الخطوات المكتملة محفوظة في ذاكرة التخزين المؤقت.
- لا توجد مساحة كافية على الجهاز (No space left on device): حرّر مساحة في Docker Desktop، أو تحقق مما يستخدمه Docker بالأمر
docker system df. - يفشل عند `yarn build` بعد تعديل الشيفرة: الخطأ الظاهر فوق ذلك السطر يذكر اسم الملف. شغّل
yarn typecheckمن دون Docker لترى كل أخطاء الأنواع دفعة واحدة. - يفشل عند الخطوة نفسها في كل مرة: ابنِ مرة أخرى من دون ذاكرة التخزين المؤقت.
juicydocker build --no-cache -t juicy .يقول Yarn إن إصداره 1.22
This project's package.json defines "packageManager": "yarn@4…". However the current global version of Yarn is 1.22…يثبّت القالب Yarn 4 عبر Corepack. تعني هذه الرسالة أن Corepack غير مفعّل بعد، فأجاب Yarn القديم المثبّت على مستوى النظام بدلًا منه.
corepack enableثم شغّل yarn install مرة أخرى. إذا لم يكن مع Node.js لديك Corepack، فثبّته أولًا بالأمر npm install -g corepack.
لا تظهر العلب
Loading models...تبقى الصفحة على مؤشر التحميل، أو تعرض الخلفية والنص من دون علب. لا تظهر العجلة إلا بعد تحميل العلبة الأولى وخريطة الإضاءة معًا، لذا يكفي فشل ملف واحد لإبقائها مخفية.
- مسار نموذج خاطئ. ملف
.glbالخاص بكل علبة مذكور فيsrc/features/carousel/constants/juiceCans.tsويُقدَّم منpublic/. والملف الذي غُيّر اسمه أو نُقل يُجيب بالخطأ 404. - خريطة الإضاءة مفقودة. هي الملف
public/assets/hdri/forest_slope_1k.hdr، ويُذكر اسمه فيsrc/features/carousel/constants/environment.ts. أبقِ الملف في مكانه، أو غيّر الاثنين معًا. - WebGL معطّل. فعّل تسريع العتاد في إعدادات المتصفح، أو جرّب متصفحًا آخر.
افتح أدوات المطور في المتصفح، ثم تبويب Network، وأعد تحميل الصفحة: الطلب الفاشل يذكر اسم الملف المفقود. كل ما تحمّله الصفحة موجود في المجلد، فلا تحتاج إلى أي خدمة خارجية.
لا يظهر تعديل
- مع Docker: تحمل الصورة نسخة من الموقع كما كان عند بنائها. شغّل
docker build -t juicy .مرة أخرى، ثم شغّل حاوية جديدة. - مع `yarn start`: شغّل
yarn buildمرة أخرى أولًا. وحدهyarn devيلتقط التعديلات تلقائيًا. - نموذج ثلاثي الأبعاد أو صورة جديدة تبدو قديمة: يحتفظ المتصفح بالملفات القادمة من
public/. أعد التحميل من دون ذاكرة التخزين المؤقت (Ctrl+Shift+R، أو Cmd+Shift+R على Mac)، أو أعطِ الملف الجديد اسمًا جديدًا.
لا يقرأ الموقع أي متغيرات بيئة. إذا أضفت متغيرًا يبدأ اسمه بـ NEXT_PUBLIC_، فإن Next.js يكتب قيمته داخل الصفحة وقت البناء، لذا تحتاج القيمة الجديدة إلى بناء جديد أيضًا.
يظهر نص على شكل مفتاحه
juices.lemonGinger.nameتعرض الصفحة اسم النص بدلًا من النص نفسه، وتسجّل وحدة تحكم المتصفح MISSING_MESSAGE. المفتاح غير موجود في أحد ملفي الرسائل، وغالبًا بعد أن صار لنكهة معرّف جديد. أضفه إلى messages/en.json وmessages/ar.json كليهما، بالمسار نفسه في كل منهما.
الموقع لا يستجيب على خدمة استضافة
يستمع yarn start دائمًا على المنفذ 3030: يضبطه السكربت بـ -p 3030، وهو يتقدّم على المتغير PORT. فالمضيف الذي يعطي التطبيق منفذه الخاص في PORT لا يجد شيئًا هناك. أخبر المضيف أن التطبيق يستمع على 3030، أو استخدم هذا أمرًا للتشغيل:
yarn next start -p $PORT