Как запустить приложение django на каналах с супервизором и gunicorn или daphne
У меня есть проблема с моей конфигурацией от супервизора, мое приложение хорошо использует django_channles, когда я запускаю свое приложение, используя два кода ниже, работающие хорошо
(myenv)/colonybit/colonybitbasics/python manage.py runserver 0.0.0.0:8000
или же
(myenv)/colonybit/colonybitbasics/daphne -b 0.0.0.0 -p 8000
и у меня есть другое приложение в vuejs, код выше работает, но когда я пытаюсь запустить свое приложение с этим кодом ниже, как это
(myenv)/colonybit/ ./bin/start.sh
мой файл start.sh
NAME="colony_app"
DJANGODIR=/home/ubuntu/colonybit # Django project directory
SOCKFILE=/home/ubuntu/colonybit/run/gunicorn.sock
USER=ubuntu # the user to run as
GROUP=ubuntu # the group to run as
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=colonybit.settings
DJANGO_WSGI_MODULE=colonybit.asgi # ASGI module name
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /home/ubuntu/colonybit/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
exec colonybit ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=0.0.0.0:8000 \
--log-level=debug \
--log-file=-
сервер работает нормально, но мое приложение в vuejs, выдает ошибку 500, не может использовать мое приложение в django_channels
подскажите пожалуйста, как настроить мой файл start.sh для работы с использованием ASGI
Спасибо за ваше время.
1 ответ
Ваше приложение django работает со своим сервером разработки, потому что этот сервер обрабатывает запросы http и websocket для вас. Теперь, похоже, ваша проблема с производством, и gunicorn не смог справиться с обоими запросами, так что Дафни начинает играть.
Лучший способ решить эту проблему - запустить daphne ASGI в другом файле, который содержит exec daphne -b 0.0.0.0 -p 8001 $DJANGO_ASGI_MODULE: приложение (обратите внимание на другой порт, используемый здесь), остальные части двух файлов должны быть довольно похожи. В последнее время вы можете обратиться к этому для получения дополнительной информации или посмотреть, необходимо ли отказаться от unix-сокетов (это работает для меня): https://github.com/django/channels/issues/919
После того, как вы это сделаете, интегрируйтесь с супервизором, чтобы сделать ваш бег простым и стабильным.