#nginx #django-rest-framework #websocket #gunicorn #apscheduler
Вопрос:
Я получаю WebSocketBadStatusException Состояние рукопожатия 502 Плохая ошибка шлюза в рабочей среде после развертывания функции, которая использует apscheduler, хотя apscheduler работает. У меня есть drf в качестве бэкенда, обслуживаемого через nginx и gunicorn. Я использую channels.generic.websocke.AsyncWebsocketConsumer
для написания websocket consumer. Мой код планировщика:
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ThreadPoolExecutor
from myapp.settings.production import DATABASES
from urllib.parse import quote_plus
jobstores = {
'default': SQLAlchemyJobStore(url=f'postgresql://{DATABASES["default"]["USER"]}:{quote_plus(DATABASES["default"]["PASSWORD"])}@{DATABASES["default"]["HOST"]}:{DATABASES["default"]["PORT"]}/{DATABASES["default"]["NAME"]}')
}
executors = {
'default': ThreadPoolExecutor(20)
}
job_defaults = {
'coalesce': False,
'max_instances': 10
}
tscheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults)
Как я запускаю планировщик:
from django.apps import AppConfig
from organizations.schedular import tscheduler
class OrganizationsConfig(AppConfig):
name = 'organizations'
def ready(self):
tscheduler.start()
Как я использую планировщик:
#scheduling welcome email
run_at = datetime.datetime.now() datetime.timedelta(minutes=30)
tscheduler.add_job(
send_welcome_email,
'date',
next_run_time=run_at,
args=[
organization_user_instance.user.email,
organization_user_instance.user.profile.first_name
],
id=f'welcome_{organization_user_instance.id}'
)
На моей локальной машине websocket и планировщик работают нормально. Я борюсь с конфигурацией nginx и gunicorn, если что-то связано с этим, не стесняйтесь направлять меня.