Python Nginx Django和Gunicorn。Gunicorn袜子文件丢失?
我有一个基于此配置的ansible虚拟机,但由于某些原因,尝试启动Gunicorn时会出现以下错误: 无法连接到/path/to/my/gunicorn.sock 在nginx日志文件中: connect()到unix:/path/to/my/gunicorn.sock在连接到上游时失败(2:没有这样的文件或目录) 实际上,指定目录中缺少套接字文件。我已经检查了目录的权限,它们都很好 这是我的gunicorn_开始脚本:Python Nginx Django和Gunicorn。Gunicorn袜子文件丢失?,python,django,python-2.7,nginx,gunicorn,Python,Django,Python 2.7,Nginx,Gunicorn,我有一个基于此配置的ansible虚拟机,但由于某些原因,尝试启动Gunicorn时会出现以下错误: 无法连接到/path/to/my/gunicorn.sock 在nginx日志文件中: connect()到unix:/path/to/my/gunicorn.sock在连接到上游时失败(2:没有这样的文件或目录) 实际上,指定目录中缺少套接字文件。我已经检查了目录的权限,它们都很好 这是我的gunicorn_开始脚本: NAME="{{ application_name }}" DJANGOD
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在由upstart运行时遇到了一个问题,要么从未启动并运行,要么关闭。以下是一些步骤,可以帮助您获得更多信息以追踪您的问题:
- 在我的例子中,当这种情况发生时,gunicorn从未抽出时间做任何错误日志记录,所以我不得不去别处寻找。请尝试
,查看是否有员工离开。我没有李>ps auxf | grep gunicorn
- 在系统日志中查找来自upstart的投诉,
,我发现我的gunicorn服务已停止,因为它恢复得太快,尽管我怀疑这将是您的问题,因为您的配置中没有恢复。无论如何,您可能会在那里找到一些东西grep init:/var/log/syslog
- 在看到gunicorn无法运行或记录错误后,我决定尝试从命令行运行它。转到manage.py所在的目录,对gunicorn实例运行upstart命令的扩展版本。比如(用适当的垃圾代替我使用的垃圾来替换所有的VAR):
/path/to/your/virtualenv/bin/gunicorn--name myapp--workers 4--max requests 10--user-appuser--group-webusers--log-leveldebug--error-logfile/where/I/can/find/error.log--bind unix:/tmp/myapp.socket myapp.wsgi
- 如果幸运的话,在手动运行命令后,您可能会得到python回溯,或者在gunicorn错误日志中找到一些东西。有些事情可能会出错:
- django错误(可能是加载设置模块时出现问题?)。确保您的wsgi.py正在引用服务器上相应的设置模块
- upstart脚本中的空白问题。我有一个标签藏在空间里,把东西都吞了
- 用户/权限问题。最后,我能够在命令行上以root用户身份运行gunicorn,但不能通过upstart配置以非root用户身份运行gunicorn
希望有帮助。我花了好几天的时间来追踪这些东西。在阅读了迈克尔·卡钦斯基的《伟大指南》之后,我遇到了同样的问题 我就是这样解决的 我在bash脚本中使用了这个变量,通过Supervisor(myapp/bin/gunicorn\u start)启动gunicorn: 当您第一次运行bash脚本时,它会使用root权限创建一个“run”文件夹和一个sock文件。所以我sudo删除了run文件夹,然后在没有sudo权限的情况下重新创建了它!现在,如果你重新运行Gunicorn或Supervisor,你就不会再有恼人的丢失sock文件错误消息了 TL;DR
嗯,我在这个问题上花了一个多星期的时间,终于找到了答案。 请遵循的链接,但他们并没有指出重要的问题,其中包括一个
我也遇到了同样的问题,发现我在gunicorn脚本中将DJANGO_SETTINGS_模块设置为生产设置,而wsgi设置使用的是dev
我将DJANGO_设置_模块指向dev,一切正常 当您尚未安装需求时,也可能会出现错误。在我的例子中,查看gunicorn错误日志,我发现有一个丢失的模块。通常发生在您忘记pip安装新需求时。hmm,忘了提到您可能应该使用--daemon o
SOCKFILE={{ myapp absolute path }}/run/gunicorn.sock