Conda、Django、Gunicorn 和 Supervisor 错误解释器:没有此文件或目录

Conda、Django、Gunicorn 和 Supervisor 错误解释器:没有此文件或目录

我正在关注这个教程部署我的 Django 应用程序,但修改了我的可执行文件/var/www/my_django_project/bin/gunicorn_start以使用我的 conda env 而不是 virtualenv。

CONDA_SRC=/home/justin/anaconda3/etc/profile.d/conda.sh
GUNICORN=/home/justin/anaconda3/pkgs/gunicorn-20.0.4-py38_0/bin/gunicorn
...
source $CONDA_SRC
conda activate myenv

执行时sudo bin/gunicorn_start,我得到:

“starting backend”
bin/gunicorn_start: /home/justin/anaconda3/pkgs/gunicorn-20.0.4-py38_0/bin/gunicorn: /opt/anaconda1anaconda2anaconda3/bin/python: bad interpreter: No such file or directory
bin/gunicorn_start: line 25: /home/justin/anaconda3/pkgs/gunicorn-20.0.4-py38_0/bin/gunicorn: Success

我的supervisor.log显示:

supervisor: couldn't exec /var/www/my_django_project/bin/gunicorn_start: EACCES
supervisor: child process was not spawned

答案1

我通过将路径基更改为包含 conda 环境二进制文件的目录来修复此问题。在激活 conda env 后,GUNICORN可以使用 找到它,结果为: 。使用。which python/home/justin/anaconda3/envs/production/bin/python/home/justin/anaconda3/envs/production/bin/gunicorn

bin/gunicorn_start可执行文件:

#!/bin/bash

NAME=”backend”
DJANGODIR=/var/www/my_django_project/backend
SOCKFILE=/var/www/my_django_project/run/gunicorn.sock
USER=django
GROUP=my_django_project
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=backend.settings
DJANGO_WSGI_MODULE=backend.wsgi
CONDA_SRC=/home/justin/anaconda3/etc/profile.d/conda.sh
GUNICORN=/home/justin/anaconda3/envs/production/bin/gunicorn

echo “starting backend”

cd $DJANGODIR
    source $CONDA_SRC
conda activate myenv
    export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
    export PYTHONPATH=$DJANGODIR:$PYTHONPATH
    
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

exec $GUNICORN
 ${DJANGO_WSGI_MODULE}:application \
  --name $NAME \
  --workers $NUM_WORKERS \
  --user=$USER --group=$GROUP \
  --bind=unix:$SOCKFILE \
  --log-level=debug \
  --log-file=-

sh我的主管配置在参数中也缺失,command并且我的主管配置使用了错误的扩展名。请确保扩展名是.conf。这是我的更新django.conf

[program:django]
command =sh /var/www/my_django_project/bin/gunicorn_start
user = django
stdout_logfile = /var/www/my_django_project/backend/logs/supervisor.log
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8

希望这可以帮助遇到此问题的人。

相关内容