我试图设置我的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
答案 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;
};