繁体   English   中英

Django应用程序与uwsgi,nginx:“没有模块称为网站”

[英]Django app with uwsgi, nginx: “no module called site”

我正在使用nginx,uwsgi和虚拟环境设置django应用程序。 我使用的是python版本2.7.12和ubuntu 16.04。 当我访问服务器的IP地址时,我会收到nginx欢迎页面。 但是,当我访问我的网站的域名时,我收到502错误的网关错误。 我正在遵循DigitalOcean指南中的步骤。

这是sudo systemctl status uwsgi的输出:

● uwsgi.service - uWSGI Emperor service
Loaded: loaded (/etc/systemd/system/uwsgi.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-06-24 05:06:46 UTC; 7min ago
Process: 11650 ExecStartPre=/bin/bash -c mkdir -p /run/uwsgi; chown django:www-data /run/uwsgi (code=exited, status=0/SUCCESS)
Main PID: 11655 (uwsgi)
Status: "The Emperor is governing 0 vassals"
CGroup: /system.slice/uwsgi.service
       └─11655 /usr/local/bin/uwsgi --emperor /etc/uwsgi/sites

Jun 24 05:13:56 localhost uwsgi[11655]: lock engine: pthread robust mutexes
Jun 24 05:13:56 localhost uwsgi[11655]: thunder lock: disabled (you can enable it with --thunder-lock)
Jun 24 05:13:56 localhost uwsgi[11655]: uwsgi socket 0 bound to UNIX address /home/django/firstsite/firstsite.sock fd 3
Jun 24 05:13:56 localhost uwsgi[11655]: setuid() to 1000
Jun 24 05:13:56 localhost uwsgi[11655]: Python version: 2.7.12 (default, Nov 19 2016, 06:48:10)  [GCC 5.4.0 20160609]
Jun 24 05:13:56 localhost uwsgi[11655]: Set PythonHome to /home/django/Env/firstsite
Jun 24 05:13:56 localhost uwsgi[11655]: ImportError: No module named site
Jun 24 05:13:56 localhost uwsgi[11655]: VACUUM: unix socket /home/django/firstsite/firstsite.sock removed.
Jun 24 05:13:56 localhost uwsgi[11655]: Sat Jun 24 05:13:56 2017 - [emperor] curse the uwsgi instance firstsite.ini (pid: 11753)
Jun 24 05:13:59 localhost uwsgi[11655]: Sat Jun 24 05:13:59 2017 - [emperor] removed uwsgi instance firstsite.ini

似乎是问题的一部分的一个错误是:Jun 24 04:30:55 localhost uwsgi [11155]:ImportError:没有模块名为site Jun 24 04:30:55 localhost uwsgi [11155]:VACUUM:unix socket / run /uwsgi/firstsite.sock已删除。

这是我的firstsite.ini文件:

[uwsgi]
project   = firstsite
uid       = django
base      = /home/%(uid)

chdir     = %(base)/%(project)
home      = %(base)/Env/%(project)
module    = %(project).wsgi:application

master    = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chown-socket = %(uid):www-data
chmod-socket = 666
vacuum    = true

当我运行命令sudo tail -F /var/log/nginmx/error.log时 ,这是输出:

2017/06/24 14:54:06 [crit] 11909#11909: *81 connect() to unix:/home/django/firstsite/firstsite.sock failed (2: No such file or directory) while connecting to upstream, client: 12.345.678.910, server: example.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/home/django/firstsite/firstsite.sock:", host: "example.com"

(fyi:对于这篇文章,我用example.com替换了我的网站的域名)

这是我的nginx.conf:

server {
listen 80;
server_name example.com www.example.com;

location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
    root /home/django/firstsite;
}

location / {
    include         uwsgi_params;
    uwsgi_pass      unix:/home/django/firstsite/firstsite.sock;
    }
}

我不确定为什么uwsgi进程无法创建.sock文件,并且不确定是否因为python无法找到名为“site”的模块。 我看到stackoverflow上的一些人认为这是一个python版本问题,所以我用新的ubuntu安装重新加载我的服务器,验证python 2的步骤是DigitalOcean指南中跟随(到字母)的步骤,并从那里继续。

有人能指出我正确的方向吗? 我担心我犯了一个小错误,但我花了几个小时撞到这堵墙无济于事。

我发现了这些问题:

Jun 24 05:13:56 localhost uwsgi[11655]: Set PythonHome to /home/django/Env/firstsite

第一个问题是我创建了一个名为“myvirtualenv”的虚拟环境,这意味着路径“/ home / django / Env / firstsite”无效。 将路径更改为“home / django / Env / myvirtualenv”解决了部分问题。

其次,遵循编写的指南(对于Ubuntu 16.04)会导致轻微的python版本问题。 这一行来自/etc/uwsgi/sites/firstsite.ini

home = %(base)/Env/firstsite

必须改为......

home = %(base)/Env/myvirtualenv/

正确设置python路径。 再次,这是因为我没有将我的virtualenv命名为与我的django项目同名。 所有这些都是一个简单的命名问题。 当然,回想起来,错误日志一直在明确说明这个问题 - 遗憾的是,我当时对错误日志的使用情况了解不够,无法理解他们的输出,所以总体来说这是一个很好的学习经历。

我希望这可以帮助那些可能会忽视像这样的微不足道的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM