我有一个基于此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
有人可以建议还有什么可能导致丢失的套接字文件吗?
由于
答案 0 :(得分:22)
好吧,因为我没有足够的代表发表评论,我在这里提到缺少套接字建议没有很多特异性,但我可以告诉你一些我是如何开始的穿上你的鞋子并开始工作。
它的长短不一之处在于,当被新贵开始运行并且从未上升,运行或关闭时,gunicorn遇到了问题。以下是一些可帮助您获取更多信息以跟踪问题的步骤:
ps auxf | grep gunicorn
,看看你是否有工人要去。我没有。 grep init: /var/log/syslog
,向我展示我的枪炮服务因为重生太快而被停止了,但我怀疑这是你的问题,因为你没有&#39 ;你的conf中有一个respawn。无论如何,你可能会在那里找到一些东西。看到gunicorn无法运行或记录错误后,我决定尝试从命令行运行它。转到manage.py所在的目录,并针对gunicorn实例运行upstart命令的扩展版本。类似的东西(用适当的litterals替换所有的变种而不是我使用的垃圾。):
/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
如果您很幸运,在手动运行命令后,您可能会获得python回溯或在gunicorn错误日志中找到某些内容。一些可能出错的事情:
希望有所帮助。已经有好几天的时间来追踪这些东西了。
答案 1 :(得分:8)
在跟随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
答案 2 :(得分:2)
当您还没有pip安装需求时,也可能会出现错误。在我的情况下,查看gunicorn错误日志,发现其中缺少一个模块。通常会在您忘记点安装新要求时发生。
答案 3 :(得分:1)
我遇到了同样的问题,发现我已经将DJANGO_SETTINGS_MODULE设置为gunicorn脚本中的生产设置,并且wsgi设置使用了开发。
我把DJANGO_SETTINGS_MODULE指向dev,一切正常。
答案 4 :(得分:0)
好吧,我在这个问题上工作了一个多星期,终于能够搞清楚了。 请关注digital ocean中的链接,但他们没有查明包含
的重要问题* 1 connect()到unix:/tmp/myproject.sock失败(2:没有这样的文件或目录)
<强>等强>
对于Nginx和Gunicorn之间的连接,这些问题基本上是权限问题。 为简单起见,我建议 为您创建的每个文件/项目/ python程序提供相同的nginx权限 。
要解决所有问题,请遵循以下方法: 首先是:
现在转到/etc/nginx/nginx.conf文件。 转到服务器模块并附加:
location / { 包括proxy_params; proxy_pass http&lt;&gt;:&lt;&gt; // unix:/home/nginx/myproject.sock; } 删除&lt;&gt; 请勿在此处关注digitalocean aricle