正确设置UWSGI的路径

时间:2016-06-05 23:19:00

标签: python django uwsgi

我试图设置我的uwsgi并遇到问题。当我在我的项目文件夹中设置项目路径时,UWSGI看到了我的wsgi.py,但没有看到任何其他应用程序,因为它们在一个级别上...但是如果我尝试设置路径只是为了我的项目文件夹,UWSGI没有看到我的wsgi.py ...如何正确设置路径?

您可以在下面看到我的项目层次结构和UWSGI设置,它看到了我的wsgi.py,但没有看到我的应用(No module named menuItem示例)。

层次:

root --reddish ---env ---reddish ----article ----menuItem ----myProject -----wsgi.py -----settings.py

UWSGI设置:

[uwsgi]
virtualenv=/root/reddish/env/
chdir=/root/reddish/reddish/myProject/
module=wsgi:application
env=DJANGO_SETTINGS_MODULE=settings
master=True
plugins=python27
vacuum=True
socket=/tmp/%n.sock
pidfile=/tmp/%n.pid
daemonize=/var/log/uwsgi/%n.log

3 个答案:

答案 0 :(得分:4)

  

始终避免以root用户身份运行uWSGI实例。你可以放弃   使用uid和gid选项的权限:

http://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#security-and-availability

理想情况下,您应该将应用程序移出根文件夹。但目前,你需要修复你的路径

virtualenv=/root/reddish/env/
chdir=/root/reddish/reddish/

另一点不是将virtualenv设置为项目文件的一部分。理想情况下,它们应分开保存。

理想情况下,这两条路径都应位于/ root /文件夹之外。

更新: 您可能需要为每个项目使用不同的virtualenvs这一事实并不重要。事实上,在某些情况下,您可能需要两个virtualenvs用于同一个项目!考虑一下:假设您正在研究django 1.9。 Django 1.10即将到来,可能想升级。然后你为django 1.10创建一个新的virtualenv如果你把它放在你的项目中,现在你有另外30-40 MB的代码并不属于你。这使得版本控制和备份变得困难。

Virtualenvs并不是您项目的一部分,但它是您的项目所依赖的python安装和第三方库。

答案 1 :(得分:1)

您需要更改为redish并从那里指向您的设置。

chdir=/root/reddish/reddish
env=DJANGO_SETTINGS_MODULE=myProject.settings

答案 2 :(得分:1)

如果您的manage.py处于偏红状态,请在manage.py所在的同一目录中创建目录“settings”,创建默认设置文件,如下所示 ./settings/settings.py

包括:

try:

    from development_settings import *

except ImportError:

    from default_settings import *

然后,在settings / development_settings.py和as中设置配置之后 回退,在default_settings.py中,将manage.py编辑为:

import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

并将reddish / wsgi.py设为:

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.settings")

application = get_wsgi_application()

所以你将拥有一个像:

这样的目录结构
     +--conf/uwsgi_params
     |
     +--logs/uwsgi.log 
     |
/root/reddish-__init__.py  # run touch __init__.py if does not exist
             |
             +uwsgi.ini
             |
             +manage.py
             |
             +reddish/__init__.py # run touch __init__.py if does not exist
             |       |
             |       +urls.py
             |       |    
             |       +wsgi.py
             |             
             +settings/__init__.py # run touch __init__.py if does not exist
                      |
                      +settings.py # listed below
                      |
                      +development_settings.py # your development settings
                      |
                      +default_settings.py # your fallback settings

此时你应该能够摆脱myProject / settings.py而转而支持 设置/ development_settings.py 还记得,在这种情况下,应用程序名称     设置/ development_settings.py 和     设置/ default_settings.py

应包含以下行:

ROOT_URLCONF = 'reddish.urls'
WSGI_APPLICATION = 'reddish.wsgi.application'

如果你使用nginx作为反向代理,你的nginx配置服务器部分应该有:

root /root/reddish/;

location /media {
    alias /root/reddish/media;  #create this directory if does no exist
}

location /static {
    alias /root/reddish/static; #create this directory if does not exist
                                #and use with ./manage.py collectstatic
}

与nginx一起使用的 uwsgi_params 文件(在/ root / conf中)应包括:

uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_ADDR $server_addr;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;

然后如果你在nginx conf中使用套接字而不是聚类设置

location / {
       uwsgi_pass unix:///tmp/uwsgi.sock; # or /tmp/%n.sock-adjust uwsgi.ini
       include /root/conf/uwsgi_params;
       proxy_set_header X-Forwarded-Protocol $scheme;
       uwsgi_modifier1 30;
       proxy_set_header HTTP_AUTHORIZATION $http_authorization;
       proxy_set_header  X-Real-IP  $remote_addr;
       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header  Host $http_host;
       proxy_redirect  off;
       uwsgi_read_timeout 900;
};