![Conda, Django, Gunicorn y Supervisor mal intérprete: no existe tal archivo o directorio](https://rvso.com/image/756784/Conda%2C%20Django%2C%20Gunicorn%20y%20Supervisor%20mal%20int%C3%A9rprete%3A%20no%20existe%20tal%20archivo%20o%20directorio.png)
estoy siguiendo estotutorialpara implementar mi aplicación Django, pero modifiqué mi ejecutable /var/www/my_django_project/bin/gunicorn_start
para usar mi conda env en lugar de 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
Al ejecutar sudo bin/gunicorn_start
, obtuve:
“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
y mi supervisor.log muestra:
supervisor: couldn't exec /var/www/my_django_project/bin/gunicorn_start: EACCES
supervisor: child process was not spawned
Respuesta1
Solucioné este problema cambiando la base de mi GUNICORN
ruta al directorio que contiene los archivos binarios de mi entorno Conda. Esto se puede encontrar which python
mientras su conda env está activado, lo que proporciona: /home/justin/anaconda3/envs/production/bin/python
. Usar /home/justin/anaconda3/envs/production/bin/gunicorn
.
bin/gunicorn_start
ejecutable:
#!/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=-
La configuración de mi supervisor también faltaba sh
en el command
argumento y mi configuración de supervisor usó la extensión incorrecta. Asegúrate de que la extensión sea .conf
. Aquí está mi actualización 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
Espero que esto ayude a cualquiera que tenga este problema.