Python Appengine Mapreduce 运行时给出错误的实体类型
我为这个问题纠结了好几个小时……
在我的项目里,我的models.py文件放在“project”文件夹下,也就是主目录的一个子文件夹里。还有一些mapreduce相关的文件放在“project”文件夹里的“mapreduce”文件夹里。文件结构看起来是这样的:
主目录
-项目文件夹
-> models.py
-> Mapreduce文件夹
我定义的mapreduce.yaml文件是:
mapreduce:
- name: Advice_Hidden
mapper:
input_reader: mapreduce.input_readers.DatastoreInputReader
handler: mapreduce.main_map_handler.add_hidden
params:
- name: entity_kind
default: project.models.Advice
但是当我尝试运行mapreduce的时候,出现了这个错误:
BadReaderParamsError: Bad entity kind: Could not find 'models' on path 'advice'
有没有人能帮我一下?另外,我还在使用Django-Piston。
1 个回答
1
我也遇到同样的问题,重新排列文件是可以的,但我现在无法重新整理我的文件夹结构。在我的情况下,我在“projects”目录下有一个_init_.py文件。我还尝试在根目录下添加一个_init_.py文件,根目录里有app.yaml和mapreduce.yaml文件,但没有成功。
奇怪的是,我的错误信息不一样。用你的例子来说,应该是这样的:
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/mapreduce/input_readers.py", line 660, in validate
raise BadReaderParamsError("Bad entity kind: %s" % e)
BadReaderParamsError: Bad entity kind: **Could not find 'models' on path 'project'**
其实,我刚发现,在生产环境下是可以工作的,也就是说,根目录(也就是app.yaml所在的地方)在sys.path中。而在sdk中却不在。需要找出原因。我正在调查中。