我有一个相当大的问题。
我对uwsgi很新,并不是100%确定如何调试此问题,但我会告诉您有关我所处位置的信息。
当我运行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这么新,我甚至无法猜测它是什么,对我来说,根据文档,这一切看起来都不错。
如果您需要有关我的设置的更多信息,请询问。
答案 0 :(得分:72)
使用uwsgi在ubuntu服务器上删除django网站非常简单,但在犯错之前还有一些事情你需要知道。
您有两种方法可以在ubuntu上安装uwsgi:apt-get或pip
如果你使用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中安装它。 它毫无意义,你可能无法运行它。
Daemonize意味着让uwsgi在系统启动和后台运行。 根据你安装uwsgi的方式,你有两种方法。
当您在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管理的服务
如果utsgi是由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将被忽略,或类似的东西。
我建议每个人都使用pip和Upstart方式,它比apt-get方式好得多。
如果是这样,你正在使用uwsgi的emperor模式,这非常方便和强大。
现在,您可以在/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.ini
文件。然后%n
表示'示例'。您不需要用真实姓名替换它。 uwsgi会为你做这件事。
然后重新启动或重新加载uwsgi:
sudo service uwsgi restart
检查您的套接字文件:
ll /tmp/*.sock
如果它在那里,你现在成功使用uwsgi:)
以域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
你需要像这样重启你的uwsgi emperor实例:
sudo initctl restart uwsgi-server
或:
sudo service uwsgi-server restart
这就是全部!