谷歌应用引擎Django的路径
我完全不明白这个错误。我使用django-nonrel,通过manage.py将其上传到我的应用程序。而有时我有这样的:谷歌应用引擎Django的路径
<type 'exceptions.AttributeError'>: 'Settings' object has no attribute 'DATABASE_ROUTERS'
Traceback (most recent call last):
File "/base/data/home/apps/appid/3.347077242893060339/execute.py", line 2, in <module>
from djapp import queue_controller
File "/base/data/home/apps/appid/3.347077242893060339/djapp/queue_controller.py", line 5, in <module>
from djapp.models import Operation
File "/base/data/home/apps/appid/3.347077242893060339/djapp/models.py", line 3, in <module>
from django.db import models
File "/base/data/home/apps/appid/3.347077242893060339/django/db/__init__.py", line 66, in <module>
router = ConnectionRouter(settings.DATABASE_ROUTERS)
File "/base/python_runtime/python_lib/versions/third_party/django-0.96/django/conf/__init__.py", line 32, in __getattr__
return getattr(self._target, name)
或
<type 'exceptions.ImportError'>: No module named files.uploadhandler
Traceback (most recent call last):
File "/base/data/home/apps/appid/3.347067228745038183/djangoappengine/main/main.py", line 28, in <module>
from django.core.handlers.wsgi import WSGIHandler
File "/base/python_runtime/python_lib/versions/third_party/django-0.96/django/core/handlers/wsgi.py", line 1, in <module>
from django.core.handlers.base import BaseHandler
File "/base/python_runtime/python_lib/versions/third_party/django-0.96/django/core/handlers/base.py", line 3, in <module>
from django import http
File "/base/data/home/apps/appid/3.347067228745038183/django/http/__init__.py", line 28, in <module>
from django.http.multipartparser import MultiPartParser
File "/base/data/home/apps/appid/3.347067228745038183/django/http/multipartparser.py", line 14, in <module>
from django.core.files.uploadhandler import StopUpload, SkipFile, StopFutureHandlers
什么是错的路径?为什么会发生?首先,路径是“/base/data/home/apps/app-id/3.347046818251769742/django/”,然后是“/base/python_runtime/python_lib/versions/third_party/django-0.96/django/”。
以及如何避免此错误?
我已经检查sys.path中,上传了新的Django几次,去掉所有不需要的文件,我失去了:(
sys.path = ['/base/data/home/apps/appid/3.347077364008022180',
'/base/data/home/apps/appid/3.347077364008022180/djangoappengine/lib',
'/base/python_runtime/python_dist/lib/python25.zip',
'/base/python_runtime/python_dist/lib/python2.5/',
'/base/python_runtime/python_dist/lib/python2.5/plat-linux2',
'/base/python_runtime/python_dist/lib/python2.5/lib-tk',
'/base/python_runtime/python_dist/lib/python2.5/lib-dynload',
'/base/python_runtime/python_lib/versions/1',
'/base/data/home/apps/appid/3.347077364008022180/']
我想这db/__init__.py
确实像from django.conf import Settings
,以任何理由,它有时给你系统的Django版本而不是你自己的版本
你可以尝试改变它以使用相对导入,如from ..conf import Settings
,这应该意味着它使用与它自己相同的包中的版本。这是Appengine使用的。
这没有奏效。我明白,有时它被赋予系统的Django版本。但是,为什么? Django不应该导入自己而不是系统? – shmakova 2010-12-21 21:18:13
嗯,要知道Python从哪里得到什么东西并不总是很容易,尤其是在appengine上,在那里你不知道它究竟是如何运行的。它可能在'sys.modules'中查找模块,或者可能是'sys.path'中的文件夹顺序错误。 – 2010-12-21 21:30:07
您使用的是appstats吗?当nonrel在该实例上使用之前,实例加载默认的Django时,似乎会发生这种事情。 – geoffspear 2010-12-20 16:55:14
我上传了“appengine console”应用程序,它也加载了django,然后将其删除。现在我的应用程序中只有django-nonrel和wave robot api。一个实例如何加载默认的Django? – shmakova 2010-12-21 21:05:10