Dan*_*ate 24 django wsgi uwsgi
我有一个相当大的问题.
我很新的uwsgi和我不是100%确定如何调试这个问题,但我会给你我在哪里的信息.
我跑的时候 uwsgi reload
sudo service uwsgi reload
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
* Reloading app server(s) uwsgi
...fail!
Run Code Online (Sandbox Code Playgroud)
而已.我得到没有别的.
我一直在寻找在堆栈溢出小时,并没有发现任何东西,正好概括了这个问题,我发现很多事情要做人民的.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
Run Code Online (Sandbox Code Playgroud)
任何见解将不胜感激.我觉得我失去了一些东西,但这么新的与uWSGI我甚至不能猜测它可能是什么,对我来说这一切看起来OK按文档.
如果您需要在我设置的任何详细信息,请只问.
guo*_*iao 75
使用uwsgi在ubuntu服务器上删除django站点非常简单,但在犯错之前还有一些事情你需要知道.
你有两种方法在ubuntu上安装uwsgi:apt-get或pip
如果你使用apt-get,你需要安装python插件:
sudo apt-get install uwsgi-plugin-python
sudo apt-get install uwsgi
Run Code Online (Sandbox Code Playgroud)
并且,在您网站的uwsgi ini文件中,您需要添加以下内容:
plugins=python
如果你使用pip,你需要先安装python-dev:
sudo apt-get install python-dev
sudo pip install uwsgi
Run Code Online (Sandbox Code Playgroud)
并且,您不再需要plugins=python
in ini文件.
在pip之前看到sudo?是的,uwsgi应该安装在全球系统中.如果你错过了这里的sudo,你可以在你的virtualenv中安装它.它毫无意义,你可能无法运行它.
Daemonize意味着使uwsgi在系统启动和后台运行.根据你如何安装uwsgi,你有两种方法.
当你apt-get install uwsgi
在ubuntu上时,它会自动安装为服务.神奇之处在于这个文件:
/etc/init.d/uwsgi
Run Code Online (Sandbox Code Playgroud)
文件/etc/init.d
将由sysvinit加载.然后你可以像这样管理你的uwsgi服务:
sudo /etc/init.d/uwsgi start|stop|restart|reload
Run Code Online (Sandbox Code Playgroud)
要么:
sudo service uwsgi start|stop|restart|reload
Run Code Online (Sandbox Code Playgroud)
service命令可以找到sysvinit管理的服务
如果您通过pip安装uwsgi,那么您只有可执行文件/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
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样管理您的uwsgi进程:
sudo initctl start|stop|restart|reload| uwsgi
Run Code Online (Sandbox Code Playgroud)
或者,仍然这样:
sudo service uwsgi start|stop|restart|reload
Run Code Online (Sandbox Code Playgroud)
是的,正如您所看到的,service命令是智能的,它可以使用相同的命令从sysvinit和Upstart管理服务.
而且,如果你同时/etc/init.d/uwsgi
和/etc/init/uwsgi.conf
,当你说:
sudo service uwsgi restart
Run Code Online (Sandbox Code Playgroud)
它将重新启动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
Run Code Online (Sandbox Code Playgroud)
这%n
意味着你的文件名.例如,我的项目名称是'example',我example.ini
为它创建了一个文件.然后%n
是'示例'.您无需使用真实名称替换它.uwsgi会为你做这件事.
然后重启或重新加载uwsgi:
sudo service uwsgi restart
Run Code Online (Sandbox Code Playgroud)
检查你的套接字文件:
ll /tmp/*.sock
Run Code Online (Sandbox Code Playgroud)
如果它在那里,你现在成功使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
重启nginx,你会看到你的网站!
uwsgi的配置文件是,/etc/init/uwsgi-server.conf
所以你应该使用的名称uwsgi-server
不是uwsgi
你需要像这样重启你的uwsgi emperor实例:
sudo initctl restart uwsgi-server
Run Code Online (Sandbox Code Playgroud)
要么:
sudo service uwsgi-server restart
Run Code Online (Sandbox Code Playgroud)
就这样!
归档时间: |
|
查看次数: |
36821 次 |
最近记录: |