مرکز آموزش میهن وب هاست

مرکز آموزش میهن وب هاست

رفع خطای Internal Server Error در جنگو

پرینت این مقاله پرینت این مقاله

خطای Internal Server Error (خطای 500) در جنگو معمولاً نشان‌ دهنده‌ وجود مشکلی در کد برنامه، تنظیمات یا عملیات سرور است. این خطا بیان می دارد که سرور نمی‌تواند درخواست را پردازش کند. موارد متفاوتی می توانند باعث ایجاد ارور مذکور شوند. جهت رفع مشکل می توانید راهکارهای زیر را انجام دهید.

مراحل بررسی و رفع خطای Internal Server Error در جنگو

1. بررسی فایل لاگ
- فایل لاگ سرور (مانند error.log در Apache یا Nginx) یا کنسول جنگو (runserver) اطلاعاتی دقیق‌تر درباره خطا ارائه می‌دهند.
- اگر فایل لاگ مشخص نیست، می‌توانید در تنظیمات پروژه جنگو DEBUG = True قرار دهید (فقط در محیط توسعه) تا جزئیات بیشتری در مرورگر مشاهده کنید.

2. فعال کردن دیباگ در حالت توسعه

در فایل تنظیمات (settings.py) کد زیر را قرار دهید:

DEBUG = True

با این کار جنگو خطاهای دقیق‌تر را در صفحه‌ نمایش می‌دهد و می‌توانید علت خطا را بهتر متوجه شوید.

توجه نمایید شما زمانی خطای Internal Server Error را مشاهده خواهید کرد که DEBUG = False باشد و اگر دیباگ را روی True قرار دهید؛ در اغلب موارد عبارت فوق دیده نشده و جزئیات دقیقی از خطا مشاهده می گردد.

اگر به هر دلیل حتی با اعمال تنظیمات فوق باز هم این خطا مشاهده شد؛ هر کدام از آیتم‌هایی که در ادامه به آنها اشاره گردیده می‌توانند باعث بروز این خطا شوند.

 بررسی تنظیمات پایگاه داده

مشکلات مرتبط با پایگاه‌داده معمولاً یکی از رایج‌ترین دلایل خطای 500 است. اطمینان حاصل کنید که:

پایگاه‌ داده به‌ درستی پیکربندی شده است -
پایگاه‌ داده در دسترس است -
دسترسی‌های لازم برای کاربر پایگاه‌ داده وجود دارد -

فرض کنید در تنظیمات شما، USER اشتباه وارد شده است؛ این اشتباه به‌ تنهایی پتانسیل بروز خطای Internal Server Error را دارد.

DATABASES = {
 'default': { 
'ENGINE': 'django.db.backends.postgresql', 
'NAME': 'mydatabase', 
'USER': 'wronguser', # اشتباه 
'PASSWORD': 'mypassword', 
'HOST': 'localhost',
'PORT': '5432',
 } 
}

در این صورت خطایی که مشاهده می‌شود به‌ صورت زیر است:

django.db.utils.OperationalError: FATAL:  password authentication failed for user "wronguser"

بررسی کدهای برنامه

مشکلات متداول در کد می‌توانند باعث خطای 500 شوند:
- استفاده از مدل‌هایی که به‌ درستی migration نشده‌ اند.
به‌ عنوان‌ مثال مدلی را ایجاد نموده و یک‌ بار makemigrations را انجام داده‌اید و پس از آن مدل دیگری ایجاد کرده اید؛ اما عملیات مهاجرت برای مدل جدید انجام نشده و این در حالی است که در بخشی از کد قصد استفاده از مدل جدید را دارید. این وضعیت به‌ راحتی باعث بروز خطای Internal Server Error خواهد شد.
- متدها یا توابعی که منتظر داده‌ ای خاص هستند و آن داده‌ ها ارسال نمی‌ شوند.

مثلاً اگر برای یک تابع که عملیات جمع دو عدد را انجام می‌دهد؛ حداقل یک ورودی از نوع "رشته" ارسال شود؛ با خطای Internal Server Error مواجه خواهید شد. 
- Query هایی که با خطا مواجه می‌شوند.

هرگونه کوئری که امکان اجرا شدن نداشته باشد نیز این خطا را ایجاد خواهد کرد. مساله مذکور به علت عدم دقت برنامه نویس اغلب در کوئری هایی که نیاز به احراز هویت دارند، دیده می‌شود.

 بررسی فایل‌های استاتیک و مدیا

اگر خطا مربوط به فایل‌های استاتیک یا مدیا است:
- بررسی کنید که تنظیمات STATIC_URL  و MEDIA_URL  به‌ درستی تعریف شده‌اند.

تعریف صحیح آیتم‌های فوق، نه‌ تنها از این خطا بلکه از مشکلات مسیردهی در پروژه جلوگیری خواهند کرد.
- مطمئن شوید که دسترسی فایل‌ها در سرور به‌ درستی پیکربندی شده است.

6. بررسی و تغییر سطح دسترسی‌ها

مشکلات مرتبط با دسترسی فایل‌ها، فولدرها یا سرویس‌های دیگر می‌تواند خطای 500 ایجاد کند. دسترسی مناسب برای فایل‌ها و فولدرها را بررسی کنید:

chmod -R 755 your_project_directory

اگر با  دستور فوق موفق به انجام این کار شوید می‌توانید از دستورات زیر استفاده نمائید.

find /home/username/example  -type d -exec chmod 755 {} \;
find /home/username/example  -type f -exec chmod 644 {} \;

7. تست با حذف Middleware‌ ها

اگر از Middleware های سفارشی یا اضافی استفاده می‌ کنید، ممکن است یکی از آنها باعث ایجاد مشکل شده باشد. می‌توانید به‌ صورت موقت Middlewareها را غیرفعال نموده و خطا را بررسی کنید.

8. بررسی بسته‌های نصب‌شده
- مطمئن شوید که همه وابستگی‌ ها به‌ درستی نصب شده‌ اند.
- اگر کتابخانه خاصی باعث ایجاد مشکل شده، نسخه آن را بررسی کنید.

9. بررسی سرور و پیکربندی‌ها

اگر پروژه روی سرور مستقر شده است:
- تنظیمات وب‌ سرویس را بررسی کنید.
- مطمئن شوید که ماژول WSGI  مانند Gunicorn  به‌ درستی پیکربندی شده است.

10. درخواست‌ها و فرم‌ها

اگر خطا در حین ارسال فرم یا درخواست خاصی رخ می‌دهد:

- بررسی کنید که مقادیر ارسال‌ شده به‌ صورت کامل و صحیح باشند.
- از روش‌های اعتبارسنجی مناسب استفاده کنید.

استفاده از Debug Toolbar (اختیاری)

برای تشخیص سریع‌تر مشکلات در محیط توسعه، ابزارهای زیادی وجود دارند. اما به‌ عنوان یک ابزار متداول می‌توانید از Django Debug Toolbar  استفاده کنید:

  1. نصب:

pip install django-debug-toolbar

  1. اضافه‌ کردن به تنظیمات:

INSTALLED_APPS += ['debug_toolbar']
MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware']
INTERNAL_IPS = ['127.0.0.1']
5/5 از 3 رای