我有一个基于这个https://github.com/jcalazan/ansible-django-stack的ansible配置VM但由于某种原因尝试启动Gunicorn会出现以下错误:
无法连接到/path/to/my/gunicorn.sock
并在nginx日志文件中:
连接到上游时connect()到unix:/path/to/my/gunicorn.sock失败(2:没有这样的文件或目录)
实际上,指定目录中缺少套接字文件。我已经检查了目录的权限,他们没事。
这是我的gunicorn_start脚本:
NAME="{{ application_name }}"
DJANGODIR={{ application_path }}
SOCKFILE={{ virtualenv_path }}/run/gunicorn.sock
USER={{ gunicorn_user }}
GROUP={{ gunicorn_group }}
NUM_WORKERS={{ gunicorn_num_workers }}
# Set this to 0 for unlimited requests. During development, you might want to
# set this to 1 to automatically restart the process on each request (i.e. your
# code will be reloaded on every request).
MAX_REQUESTS={{ gunicorn_max_requests }}
echo "Starting $NAME as `whoami`"
# Activate the virtual environment.
cd $DJANGODIR
. ../../bin/activate
# Set additional environment variables.
. ../../bin/postactivate
# Create the run directory if it doesn't exist.
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Programs meant to be run under supervisor should not daemonize themselves
# (do not use --daemon).
exec gunicorn \
--name $NAME \
--workers $NUM_WORKERS \
--max-requests $MAX_REQUESTS \
--user $USER --group $GROUP \
--log-level debug \
--bind unix:$SOCKFILE \
{{ application_name }}.wsgi
有谁能建议还有什么可能导致丢失的套接字文件?
谢谢
好吧,既然我没有足够的代表评论,我会在这里提到缺少套接字没有提出很多特殊性,但我可以告诉你一些关于我是如何从你的鞋子开始并得到的东西工作。
它的长短之处在于,当被暴发户运行并且从未起步,运行或关闭时,gunicorn遇到了问题。以下是一些可帮助您获取更多信息以跟踪问题的步骤:
ps auxf | grep gunicorn
,看看你是否有工人去。我没有。grep init: /var/log/syslog
的投诉的系统日志,向我展示了我的gunicorn服务已被停止,因为它重生太快,但我怀疑这将是你的问题,因为你没有在你的conf conf res。无论如何,你可能会在那里找到一些东西。/path/to/your/virtualenv/bin/gunicorn --name myapp --workers 4 --max-requests 10 --user appuser --group webusers --log-level debug --error-logfile /somewhere/I/can/find/error.log --bind unix:/tmp/myapp.socket myapp.wsgi
希望有所帮助。追踪这些东西已经有好几天了。
在跟随Michal Karzynski的伟大导游'Setting up Django with Nginx, Gunicorn, virtualenv, supervisor and PostgreSQL'后,我遇到了同样的问题。
这就是我解决它的方式。
我在bash脚本中有这个变量用于通过Supervisor启动gunicorn(myapp / bin / gunicorn_start):
SOCKFILE={{ myapp absolute path }}/run/gunicorn.sock
当你第一次运行bash脚本时,使用root权限创建一个'run'文件夹和一个sock文件。所以我sudo删除了运行文件夹,然后重新创建它没有sudo权限和瞧!现在,如果您重新运行Gunicorn或Supervisor,您将不再有烦人的丢失袜子文件错误消息!
TL; DR
我有同样的问题,发现我已经将DJANGO_SETTINGS_MODULE设置为gunicorn脚本中的生产设置,并且wsgi设置使用了dev。
我把DJANGO_SETTINGS_MODULE指向dev,一切正常。
好吧,我在这个问题上工作了一个多星期,终于能够搞清楚了。请关注digital ocean的链接,但他们没有指出包含的重要问题
这些问题基本上是Nginx和Gunicorn之间连接的许可问题。为简单起见,我建议为您创建的每个文件/项目/ python程序提供相同的nginx权限。
要解决所有问题,请遵循以下方法:首先是: