نکات تکمیلی Django
در این بخش می خواهیم نکات تکمیلی Django را در هاست جنگو به شما آموزش دهیم.
استقرار برنامههای ASGI
برای استقرار برنامه های ASGI نیاز هست تا متغییر محیطی ASGI_PATH را از طریق تنظیمات سرویس با مسیر فایل asgi.py
مقدار دهی نمایید.
ASGI_PATH=core.asgi:application
رفع مشکل AppRegistryNotReady در برنامه های ASGI
برای رفع این مشکل در برنامه های ASGI کافیست کد زیر را در ابتدا فایل asgi.py (قبل از import ها) برنامه خودتان قرار
دهید.
import django
django.setup()
افزایش زمان تایماوت Gunicorn
درصورتی که در سرویس خود با خطای CRITICAL WORKER TIMEOUT مواجه شدهاید و به WORKER TIMEOUT بیشتر از ۳۰ ثانیه نیاز
دارید میتوانید وارد تنظیمات سرویس خود شده و در بخش متغیرها، متغیر GUNICORN_TIMEOUT با مقدار موردنظر خود مقدار دهی
کنید.
# name : value
GUNICORN_TIMEOUT:90
افزایش تعداد ورکر Gunicorn
درصورتی که می خواهید Gunicorn با بیش یک Worker کار کند، میتوانید وارد تنظیمات سرویس خود شده و در بخش متغیرها، متغیر
GUNICORN_WORKERS با مقدار موردنظر خود مقدار دهی کنید.
# name : value
GUNICORN_WORKERS:2
افزایش تعداد Gunicorn thread
درصورتی که می خواهید Gunicorn با بیش یک thread کار کند، میتوانید وارد تنظیمات سرویس خود شده و در بخش متغیرها، متغیر
GUNICORN_THREADS با مقدار موردنظر خود مقدار دهی کنید.
# name : value
GUNICORN_THREADS:2
تغییر سطح لاگ Gunicorn
درصورتی که می خواهید سطح لاگ های Gunicorn تغییر دهید، میتوانید وارد تنظیمات سرویس خود شده و در بخش متغیرها، متغیر
GUNICORN_LOG_LEVEL با مقدار موردنظر خود مقدار دهی کنید.
# name : value
GUNICORN_LOG_LEVEL:info
تغییر نوع Worker در Gunicorn
درصورتی که میخواهید نوع Worker مورد استفاده در Gunicorn را تغییر دهید (برای مثال استفاده از gevent، eventlet یا
uvicorn workers)، میتوانید وارد تنظیمات سرویس خود شده و در بخش متغیرها، متغیر GUNICORN_WORKER_CLASS را با مقدار
موردنظر مقداردهی کنید.
# name : value
GUNICORN_WORKER_CLASS:gevent
افزایش تعداد ارتباطات Worker در Gunicorn
اگر از workerهای asynchronous مانند gevent یا eventlet استفاده میکنید و نیاز دارید که تعداد اتصالهای همزمان بیشتری
توسط هر worker مدیریت شود، میتوانید با تنظیم متغیر GUNICORN_WORKER_CONNECTIONS مقدار موردنظر خود را مشخص کنید.
# name : value
GUNICORN_WORKER_CONNECTIONS:1000
محدود کردن تعداد درخواستها برای هر Worker در Gunicorn
برای جلوگیری از افزایش مصرف حافظه (Memory Leak) یا تنظیم رفتار چرخش Workerها، میتوانید تعداد درخواستهایی که هر worker
قبل از ریست شدن پردازش میکند را با متغیر GUNICORN_MAX_REQUESTS مشخص کنید. با مقداردهی این متغیر، پس از رسیدن به سقف
تعیینشده، worker بهصورت کنترلشده ریست میشود.
# name : value
GUNICORN_MAX_REQUESTS:500
رفع مشکل CSRF Token
در برنامه های Django برای رفع مشکل CSRF Token می بایست متغییر CSRF_TRUSTED_ORIGINS را در فایل settings.py با آدرس
دامنه ای که استفاده می کنید مقدار دهی نمایید.
CSRF_TRUSTED_ORIGINS = ["https://test.chbk.run"]
رفع مشکل ALLOWED HOSTS
در برنامه های Django برای رفع مشکل ALLOWED HOSTS می بایست متغییر ALLOWED_HOSTS را در فایل settings.py با آدرس دامنه
ای که استفاده می کنید مقدار دهی نمایید.
ALLOWED_HOSTS = ["https://test.chbk.run"]
رفع مشکل لود نشدن فایل های static
در برنامه های Django برای رفع مشکل لود نشدن فایل های static لازم است مسیر static و media را در فایل settings.py برنامه
خودتان به صورت صحیح معرفی کنید.
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/media/'
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'static'
کش کردن پکیج ها
برای فعال نمودن سیستم کشینگ پکیج های سرویس میتوانید متغیر زیر را در بخش تنظیمات سرویس، متغیر های محیطی پلتفرم ست نمایید. اینکار باعث سرعت بخشیدن به روند استارت و ری استارت سرویس می شود.
# name = value
CHBK_PYTHON_SAVE=true

اتصال دامنه به سرویس Django
برای اتصال دامنه به سرویس جنگو می بایست در فایل .env سرویس دامنه اصلی خود را وارد نمایید.
SITE_URL=example.com
استفاده از کتابخانه crontab
شما باید یک فایل با نام cron-jobs در سرویس ایجاد کنید و دستور زیر درون اون قرار بدید و سپس یکبار سرویس را ریستارت کنید
تا کرون ها اجرا شوند:
/usr/local/bin/python3 /app/manage.py crontab run ######## >> /app/mylog.log 2>&1