Django应用程序与uwsgi,nginx:"没有模块称为site"

时间:2017-06-24 15:10:18

标签: python django ubuntu nginx

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

以下是 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"

(对于这篇文章,我用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指南中跟随(到字母)的步骤,并从那里继续。

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

1 个答案:

答案 0 :(得分:0)

我发现了问题:

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项目同名。所有这些都是一个简单的命名问题。当然,回想起来,错误日志一直在明确地说明这个问题 - 不幸的是,我当时对错误日志的使用情况了解不够,无法理解他们的输出,所以整体来说这是一个很好的学习经历

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