我有一个Django项目,运行在由supervisord控制的uwsgi上的virtualenv中。 在Django项目中,我有一个额外的目录'apps /',我放了所有的Django应用程序。在我的settings.py中,我将'apps /'目录添加到python路径,以便找到其中的Django应用程序。
这对runserver非常有用。但我的生产环境中有uwsgi。当我启动服务器时,Django应用程序按字母顺序加载,因为它们在文件系统中,而不是按INSTALLED_APPS定义的顺序加载。
一个例子:我在我的文件系统中有这些应用程序:
/home/anton/project/apps/events
/home/anton/project/apps/profiles
/home/anton/project/apps/routes
配置文件是我的扩展用户配置文件,路由是自行车路线,事件取决于路线,因为事件可以有1..n路线。
所以在我的INSTALLED_APPS中,它是这样定义的:
INSTALLED_APPS = [
# .. django stuff ..
'profiles',
'routes',
'events',
]
在events app的models.py中,我从路线应用中导入模型。只要按照INSTALLED_APPS设置中指定的顺序加载Django应用程序,一切正常。但uWSGI按字母顺序加载Django应用程序。因为事件是在路由之前加载的,所以我在events.py中的models.py中收到以下错误:
ImportError at /
cannot import name Route
/myproject/app/src/apps/events/models.py in <module>
from routes.models import Route
因此,当加载事件应用程序时,uwsgi不知道路由应用程序。 难道不是uwsgi加载所有python模块(读取:Django应用程序)然后开始执行请求?
非常感谢每一个提示!
谢谢, 安东
PS:
这是我的uwsgi.ini配置(也许这有帮助)
[uwsgi]
http-socket = :8081
master = true
workers = 8
pidfile = /tmp/uwsgi-project.pid
chdir = /project/app/src/apps/
pythonpath = /project/app/src/
module = wsgi
virtualenv = /home/anton/.virtualenvs/project/
env = DJANGO_SETTINGS_MODULE=settings
logto = /project/log/uwsgi-bikemap.log
max-requests = 5000
vacuum = true
'/ project / app / src /'是Django项目的所在。 '/ project / app / src / apps'是Django应用程序的所在。 wsgi.py(由module = wsgi引用)位于'/ project / app / src /'