我有一个基于这个https://github.com/jcalazan/ansible-django-stack的可靠configuration虚拟机,但由于某种原因试图启动Gunicorn给出了以下错误:
无法连接到/path/to/my/gunicorn.sock
并在nginx日志文件中:
连接()到unix:/path/to/my/gunicorn.sock失败(2:没有这样的文件或目录),当连接到上游
芹菜没有运行,没有错误信息
django nginx gunicorn,启动:作业启动失败
在Windows上使用WSGI的Nginx
通过Nginx,Django提供206个字节范围
使用Django的RabbitMQ从内部服务器获取信息
实际上在指定的目录中缺less套接字文件。 我已经检查了目录的权限,他们很好。
这是我的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 (ie 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 / Nginx使用Django的Sites Framework运行多个站点
将django部署到UserDir
Django获取IP只返回127.0.0.1
OSError – Errno 13权限被拒绝
在Apache和mod_wsgi Django中使用scipy
那么,因为我没有足够的代表评论,我在这里会提到,缺少的套接字没有太多的特殊性,但我可以告诉你一些关于我如何开始在你的鞋子,并得到的东西工作。
无论是暴发户,还是从未起床,跑步,关闭,枪炮都遇到了问题。 以下是可帮助您获取更多信息来追踪问题的一些步骤:
就我而言,发生这种情况时,gunicorn从来没有做任何错误日志记录,所以我不得不在其他地方。 试试ps auxf | grep gunicorn ps auxf | grep gunicorn看看你有没有工人。 我没有。
在系统日志中看到暴发户grep init: /var/log/syslog ,告诉我,我的gunicorn服务已经停止,因为它的恢复速度太快了,不过我怀疑这会是你的问题,因为你没有在你的conf中重生。 无论如何,你可能会找到一些东西。
看到gunicorn无法运行或记录错误后,我决定尝试从命令行运行它。 转到您的manage.py所在的目录,并运行您的新贵命令的扩展版本对付gunicorn实例。 类似的东西(用所有的替代品代替我使用的垃圾)。
/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 traceback,或者在手动运行这个命令后,在你的gunicorn错误日志中找到一些东西。 有些事情可能会出错:
Django的错误(也许问题加载您的设置模块?)。 确保你的wsgi.py引用了服务器上相应的设置模块。
你的暴发户脚本中的空白问题。 我有一个隐藏在空间的标签。
用户/权限问题。 最后,我能够在命令行上以root身份运行gunicorn,而不是以root用户身份通过upstart配置运行。
希望有所帮助。 跟踪这些东西已经有好几天了。
在跟随Michal Karzynski的伟大指南“ 用Nginx,Gunicorn,virtualenv,supervisor和PostgreSQL设置Django ”之后,我遇到了同样的问题。
这就是我解决这个问题的方法。
我在用于通过Supervisor(myapp / bin / gunicorn_start)启动gunicorn的bash脚本中有这个变量:
SOCKFILE={{ myapp absolute path }}/run/gunicorn.sock
其中,当您第一次运行bash脚本时,会使用root权限创建“运行”文件夹和sock文件。 所以我sudo删除了运行文件夹,然后重新创建它没有sudo权限,瞧! 现在,如果你重新运行Gunicorn或主管,你将不会再有烦人的缺失袜子文件的错误信息!
TL; DR
Sudo删除运行文件夹。
重新创建它没有sudo权限。
再次运行Gunicorn。
????
利润
那么我在这个问题上工作了一个多星期,终于弄清楚了。 请按照数字海洋的链接,但他们没有指出重要的问题包括
连接到上游时没有活上游
* 4连接()到unix:/myproject.sock失败(13:权限被拒绝),同时连接到上游
gunicorn OSError:[Errno 1]不允许操作
* 1连接()到unix:/tmp/myproject.sock失败(2:没有这样的文件或目录)
等等
这些问题基本上是Nginx和Gunicorn之间连接的权限问题 。 为了简单起见 ,我建议给你创建的每个文件/项目/ python程序赋予相同的nginx权限 。
要解决所有问题,请遵循以下方法:首先是:
以root用户身份登录系统
创建/ home / nginx目录。
完成之后,按照网站上的步骤操作, 直到创建一个Upstart脚本。
运行chown -R nginx:nginx / home / nginx
对于新手脚本,请在最后一行执行以下更改:exec gunicorn –workers 3 – 绑定unix:myproject.sock -u nginx -g nginx wsgi 不要添加-m权限,因为它会弄乱套接字。 从Gunicorn的文档中,当-m默认时,python会找出最好的权限
开始新贵脚本
现在转到/etc/nginx/nginx.conf文件。 转到服务器模块并追加:
位置/ {include proxy_params; proxy_pass http <>:<> // unix:/home/nginx/myproject.sock; } REMOVE <> 不要从这里开始数码海洋
现在重新启动nginx服务器,你很好去。
我遇到了同样的问题,并发现我已经将DJANGO_SETTINGS_MODULE设置为gunicorn脚本中的生产设置以及我们使用dev的wsgi设置。
我指出DJANGO_SETTINGS_MODULE开发,一切工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。