2

我有一个 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',
]

在事件应用程序的 models.py 中,我从路线应用程序导入模型。只要 Django 应用程序按照 INSTALLED_APPS 设置中指定的顺序加载,一切正常。但是 uWSGI 按字母顺序加载 Django 应用程序。而且因为事件是在路由之前加载的,所以我在事件应用程序的 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/'

4

0 回答 0