سرویس بالا نمیآید یا خطا میدهد
ساخت موفق بوده ولی استقرار شکست خورده، یا سرویس مدام ریاستارت میشود؟ «گزارش استقرار» و «گزارش اجرا» را ببینید. پیامهای زیر را آنجا یا در بنر خطا میبینید.
«برنامه هیچوقت روی پورت … پاسخ نداد»
رایجترین مشکل. برنامه روی پورتی که گردو انتظار دارد گوش نمیدهد. یکی از اینهاست:
- برنامه پورت را ثابت نوشته (مثلاً
3000). ازprocess.env.PORT(یا معادلش) استفاده کنید. - برنامه روی
127.0.0.1یاlocalhostگوش میدهد. باید0.0.0.0باشد. در Vite:--host 0.0.0.0؛ در Next.js:next start -H 0.0.0.0؛ در Flask:app.run(host="0.0.0.0"). - ایمیج روی پورت دیگری گوش میدهد (مثلاً
80). «پورت داخلی» سرویس را همان عدد بگذارید. - برنامه قبل از گوش دادن کار طولانی انجام میدهد (مثلاً migration چنددقیقهای). آن را جدا اجرا کنید (پایینتر).
EADDRINUSE
برنامه دو بار سعی کرده روی یک پورت گوش بدهد، یا پورت را ثابت نوشته. از متغیر PORT استفاده کنید و مطمئن شوید فقط یک جا listen میکنید.
«کانتینر احتمالاً بهدلیل کمبود حافظه متوقف شد»
برنامه بیشتر از سقف RAM خواسته است. کمبود حافظه
متغیر محیطی تعریف نشده
پیامهایی مثل KeyError: 'SECRET_KEY'، Missing required environment variable یا undefined در جایی که مقدار انتظار میرود. متغیر را در زبانهٔ «متغیرها» اضافه کنید. اگر فرانتاند است و متغیر را در مرورگر لازم دارد، بیلد تایم باشد.
ECONNREFUSED 127.0.0.1:5432 (یا :3306، :6379، :27017)
برنامه دنبال دیتابیس روی localhost است، ولی داخل سرویس دیتابیسی نیست. یک افزونهٔ دیتابیس بسازید، به سرویس وصلش کنید و در کد از DATABASE_URL استفاده کنید.
ENOTFOUND host یا ENOTFOUND DB_HOST
DATABASE_URL یا PGHOST را دستی با یک مقدار نمونه نوشتهاید. متغیر دستی را پاک کنید تا مقداری که افزونه میگذارد استفاده شود. (ترتیب اولویت: متغیر خود سرویس بر اتصال افزونه برنده است.)
relation "X" does not exist یا Table 'X' doesn't exist
دیتابیس وصل است ولی جدولها ساخته نشدهاند. migration را یک بار اجرا کنید: در زبانهٔ «لاگها»ی سرویس، کادر «اجرای دستور»، مثلاً npx prisma migrate deploy، python manage.py migrate یا php artisan migrate --force. یا آن را به ابتدای دستور اجرا اضافه کنید (npx prisma migrate deploy && node server.js).
unable to open database file یا attempt to write a readonly database (SQLite)
SQLite روی فایلسیستم موقت سرویس است. یا مسیر فایل دیتابیس را روی یک دیسک ماندگار بگذارید، یا به یک افزونهٔ PostgreSQL بروید. بدون دیسک، دادهها با هر استقرار پاک میشوند.
Could not find a production build (Next.js)
next start بدون next build اجرا شده. مطمئن شوید اسکریپت build در package.json همان next build است.
missing script: start
package.json اسکریپت start ندارد. اضافهاش کنید یا در تنظیمات «دستور اجرا» بنویسید.
خطای موقت از سمت گردو
اگر بنر میگوید سرویس به خاطر مشکلی در زیرساخت شروع نشد («a problem on the platform’s node, not in the app»)، چند دقیقه بعد سرویس را دوباره راهاندازی کنید.
سرویس در حال اجراست ولی خطا میدهد
- ۵۰۰: خطا از کد برنامه است. گزارش اجرا را با فیلتر
errorببینید. - ۵۰۲ یا ۵۰۳ بلافاصله بعد از استقرار: نسخهٔ تازه هنوز آماده نشده یا سرویس دیسک دارد و چند ثانیه بین نسخهها قطع است. چند ثانیه صبر کنید.
- ۵۰۳ همیشگی با صفحهٔ گردو: سرویس متوقف یا معلق است. وضعیتش را ببینید؛ اگر به خاطر پلن یا موجودی است، پلنها را ببینید.
- فقط بعضی وقتها خطا میدهد: اگر چند رپلیکا دارید، شاید یکی مشکل دارد. برچسب رپلیکا در گزارش اجرا کمک میکند. اگر برنامه نشست یا فایل را در حافظهٔ خودش نگه میدارد، با چند رپلیکا به هم میریزد. رپلیکا
تغییری که با «اجرای دستور» روی فایلهای سرویس میدهید با استقرار یا ریاستارت بعدی از بین میرود. برای رفع دائمی، کد یا تنظیمات را عوض کنید.