![Conda、Django、Gunicorn 和 Supervisor 錯誤解釋器:沒有這樣的文件或目錄](https://rvso.com/image/756784/Conda%E3%80%81Django%E3%80%81Gunicorn%20%E5%92%8C%20Supervisor%20%E9%8C%AF%E8%AA%A4%E8%A7%A3%E9%87%8B%E5%99%A8%EF%BC%9A%E6%B2%92%E6%9C%89%E9%80%99%E6%A8%A3%E7%9A%84%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E9%8C%84.png)
我正在關注這個教學部署我的 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
我透過將路徑的基數更改GUNICORN
為包含 conda 環境二進位檔案的目錄來修復此問題。which python
當你的 conda env 被啟動時,可以找到它,它給出: /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
希望這可以幫助其他遇到此問題的人。