gpt4 book ai didi

django - uWSGI不会重新加载、重新启动或让我运行服务

转载 作者:行者123 更新时间:2023-12-02 07:34:24 26 4
gpt4 key购买 nike

我有一个相当大的问题。

我对 uwsgi 很陌生,并不能 100% 确定如何调试此问题,但我会向您提供有关我所处位置的信息。

  • 我之前有网站使用此配置,但突然它不起作用了。
  • 我正在运行皇帝模式。
  • 当我使用命令行运行我的 ini 文件时,它们是正常的,但它们似乎不会自动启动

当我运行uwsgi reload

sudo service uwsgi reload

我收到此错误

* Reloading app server(s) uwsgi
...fail!

就是这样。我什么也没得到。

我已经在堆栈溢出上寻找了几个小时,但没有找到任何准确地概述此问题的内容,我发现与人们的 .ini 文件有很多关系,但我知道这不是我的问题,因为当通过手动运行我的网站时uwsgi --ini MYINI.ini 然后访问它,它运行得很好,问题出在 uWSGI 中,我不知道如何找到这个问题的解决方案。我查看了文档,但找不到有关此特定错误的任何信息。

如果有人对此感兴趣,请查看我的 uwsgi-server.conf 文件

description     "uWSGI Emperor"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

env LOGTO=/var/log/uwsgi.log
env BINPATH=/usr/local/bin/uwsgi

exec $BINPATH --emperor /etc/uwsgi/vassals --logto $LOGTO

任何见解将不胜感激。我觉得我错过了一些东西,但对 uWSGI 来说太新了,我什至无法猜测它可能是什么,对我来说,根据文档,这一切看起来都不错。

如果您需要有关我的设置的更多信息,请直接询问。

最佳答案

正确使用uwsgi

使用 uwsgi 在 ubuntu 服务器上部署 django 站点非常简单,但在犯错误之前仍然需要了解一些内容。

安装

在 ubuntu 上安装 uwsgi 有两种方法:apt-get 或 pip

apt-get

如果使用apt-get,则需要安装python插件:

sudo apt-get install uwsgi-plugin-python
sudo apt-get install uwsgi

并且,在您网站的 uwsgi ini 文件中,您需要添加以下内容:

plugins=python

如果使用pip,需要先安装python-dev:

sudo apt-get install python-dev
sudo pip install uwsgi

而且,您不再需要 ini 文件中的 plugins=python

看到 pip 之前的 sudo 了吗?是的,uwsgi应该安装在全局系统中。如果你错过了这里的 sudo,你可以将它安装在你的 virtualenv 中。它毫无意义,您可能会在运行时遇到困难。

守护进程uwsgi

Daemonize 意味着让 uwsgi 在系统启动时在后台运行。根据你如何安装uwsgi,你有两种方法。

apt-get

当您在 ubuntu 上apt-get install uwsgi 时,它会自动安装为服务。神奇之处在于这个文件:

/etc/init.d/uwsgi

/etc/init.d 中的文件将由 sysvinit 加载。然后你可以像这样管理你的uwsgi服务:

sudo /etc/init.d/uwsgi start|stop|restart|reload

或者:

sudo service uwsgi start|stop|restart|reload

service命令可以找到sysvinit管理的服务

如果你的uwsgi是通过pip安装的,那么你只有/usr/local/bin/uwsgi中的可执行文件,你需要自己守护它。

当你打开/etc/init.d/中的一些文件时,你可能会感到难过:我只是想将 uwsgi 注册为服务,为什么我需要编写这么长的脚本,看起来与其他脚本相似?这没有意义。

好消息是,在 Upstart 的帮助下它非常简单,它是 sysvinit 的替代品。它使用 /etc/init/ 而不是 /etc/init.d/

只需创建一个包含以下内容的文件/etc/init/uwsgi.conf:

description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals/ --logto /var/log/uwsgi.log

然后,您可以像这样管理您的 uwsgi 进程:

sudo initctl start|stop|restart|reload| uwsgi

或者,仍然是这样:

sudo service uwsgi start|stop|restart|reload

是的,正如您所看到的,service 命令很智能,它可以使用相同的命令来管理来自 sysvinit 和 Upstart 的服务。

并且,如果您同时拥有 /etc/init.d/uwsgi/etc/init/uwsgi.conf,当您说:

sudo service uwsgi restart

它将重新启动 Upstart 文件 /etc/init/uwsgi.conf。sysvinit 将会被忽略,或者类似的东西。

您网站的 uwsgi 配置

我推荐大家使用pip和Upstart方式,比apt-get方式好很多。

如果是这样,那么你正在使用uwsgi的皇帝模式,这是非常方便和强大的。

现在,您可以在 /etc/uwsgi/vassals/ 中创建一个 ini 文件,如下所示:

[uwsgi]
virtualenv=/path/to/venv/
chdir=/path/to/proj/root
module=wsgi:application
env=DJANGO_SETTINGS_MODULE=settings
master=True
vacuum=True
socket=/tmp/%n.sock
pidfile=/tmp/%n.pid
daemonize=/var/log/uwsgi/%n.log

%n 表示您的文件名。例如,我的项目名称是“example”,我为其创建一个 example.ini 文件。那么 %n 表示“示例”。您无需将其替换为真实姓名。 uwsgi 将为您做这件事。

然后重新启动或重新加载uwsgi:

sudo service uwsgi restart

检查您的套接字文件:

ll /tmp/*.sock

如果它在那里,那么您现在 uwsgi 就成功了:)

站点的 nginx 配置

以域名 example.com 为例:

server {
listen 80;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}

server {
listen 80;
charset utf-8;
server_name example.com;

location /static/ {
alias /path/to/static/;
}

location /media/ {
alias /path/to/media/;
}

location / {
try_files $uri @django;
}

location @django {
uwsgi_pass unix:///tmp/example.sock;
include uwsgi_params;
}
}

重启nginx,你就会看到你的网站了!

回答你的问题

您的 uwsgi 配置文件是/etc/init/uwsgi-server.conf因此,您应该使用的名称是 uwsgi-server,而不是 uwsgi

您需要像这样重新启动您的 uwsgiemperor 实例:

sudo initctl restart uwsgi-server

或者:

sudo service uwsgi-server restart

仅此而已!

关于django - uWSGI不会重新加载、重新启动或让我运行服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23073829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com