为什么HttpCachedMiddleware需要scrapy.cfg以及如何解决这个问题?
我使用scrapyd-deploy
来构建egg,并将项目部署到scrapyd。
当作业运行时,我从日志输出中看到HttpCacheMiddleware被禁用,因为找不到scrapy.cfg。
2014-06-08 18:55:51-0700 [scrapy]警告:已禁用HttpCacheMiddleware:无法找到scrapy.cfg文件来推断项目数据目录
我检查egg文件并且scrapy.cfg确实不存在,因为egg文件只包含项目目录中的文件。我错了,但我认为鸡蛋是正确的。
foo/
|- project/
| |- __init__.py
| |- settings.py
| |- spiders/
| |- ...
|- scrapy.cfg
深入研究code,我认为三个if条件中的一个在MiddlewareManager中以某种方式失败。
try:
mwcls = load_object(clspath)
if crawler and hasattr(mwcls, 'from_crawler'):
mw = mwcls.from_crawler(crawler)
elif hasattr(mwcls, 'from_settings'):
mw = mwcls.from_settings(settings)
else:
mw = mwcls()
middlewares.append(mw)
except NotConfigured, e:
if e.args:
clsname = clspath.split('.')[-1]
log.msg(format="Disabled %(clsname)s: %(eargs)s",
level=log.WARNING, clsname=clsname, eargs=e.args[0])
答案 0 :(得分:1)
在您的工作目录下放置一个空的scrapy.cfg
。
正如source code所示,project_data_dir
会尝试找到最接近的scrapy.cfg
并使用它来推断项目数据目录。