我正在尝试按日期在Mac的本地CouchDB数据库中对~13,000个文档进行排序,但每次都会在文档5407上挂起。我已经尝试增加对Futon的超时容忍度,但无济于事。这是我收到的错误消息:
表示db.view中的行('index15 / by_date_time',startkey = start,endkey = end): 文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py”,第984行, iter 文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py”,第1003行,行 在_fetch中输入文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py”,第990行 在_exec中输入文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py”,第880行 在get_json中输入文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第393行 文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第374行,获取 在_request中输入文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第419行 请求文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第239行 在_try_request_with_retries中输入文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第205行 socket.error:54
顺便说一下,这是我在脚本中输入拼写错误时产生的错误消息。
我正在使用couchpy创建视图,如下所示:
def dateTimeToDocMapper(doc):
from dateutil.parser import parse
from datetime import datetime as dt
if doc.get('Date'):
# [year, month, day, hour, min, sec]
_date = list(dt.timetuple(parse(doc['Date']))[:-3])
yield (_date, doc)
当它运行时,我可以打开一个python shell并使用server.tasks()我可以看到索引确实正在发生。
>>> server.tasks()
[{u'status':u'Processed 75 of 13567 change(0%)',u'pid':u'< 0.451.0>',u'task':u'gmail2 _design / index11' ,u'type':u'View Group Indexer'}]
但每次它都停留在13567的过程5407变化(这需要约8分钟才能达到这个目标)。我已经检查过我认为是5407号文件的内容,看起来并不是什么特别之处。
顺便说一句,如果我尝试在停止后重新启动进程,我会从server.tasks()获得此响应
>>> server.tasks()
[{u'status':u'Processed 0 of 8160 changes(0%)',u'pid':u'< 0.1224.0>',u'task':u'gmail2 _design / index11' ,u'type':u'View Group Indexer'}]
换句话说,couchDB似乎已经认识到它已经处理了13567更改的第一个5407,现在只剩下8160了。
然后它几乎立即退出并给了我相同的socket.error:54
过去几个小时我一直在网上搜索无济于事。我已经尝试从其他位置启动索引,例如Futon。正如我所提到的,我的一个错误是OS超时错误,并且在Futon的配置中增加time_out阈值似乎对此有所帮助。
如果有人能说清楚这个问题,我将非常感激。我想知道是否有一种方法可以在已经编入索引的5407文档后重新启动该过程,或者更好的是,如果有办法防止该东西在第一时间退出1/3。
非常感谢。
答案 0 :(得分:0)
从我收集的内容来看,CouchDB通过将所有文档发送到您的平板视图服务器来构建您的视图内容,该服务器在该文档上运行您的Python代码。如果该代码因任何原因失败,将通知CouchDB出现问题,这将停止更新视图内容。
因此,文档5408出现问题导致Python代码出现异常。如果您需要更多帮助,我建议您在此处发布该文档。或者,查看couchpy视图服务器的日志:它们可能包含有关代码失败的信息。