为什么scrapyd中禁用了HttpCacheMiddleware?
为什么HttpCachedMiddleware需要scrapy.cfg文件?我该如何解决这个问题呢?
我使用scrapyd-deploy
来打包项目,并把它部署到scrapyd上。
当任务运行时,我在日志中看到HttpCacheMiddleware被禁用了,因为找不到scrapy.cfg文件。
2014-06-08 18:55:51-0700 [scrapy] 警告: 禁用HttpCacheMiddleware: 找不到scrapy.cfg文件,无法推断项目数据目录
我检查了egg文件,发现里面确实没有scrapy.cfg文件,因为这个egg文件只包含项目目录中的文件。我可能错了,但我觉得这个egg文件是正确构建的。
foo/
|- project/
| |- __init__.py
| |- settings.py
| |- spiders/
| |- ...
|- scrapy.cfg
深入查看代码后,我认为MiddlewareManager中的三个if条件中有一个可能出错了。
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])
1 个回答
1
在你的工作目录下放一个空的 scrapy.cfg
文件。
根据 源代码 的内容,project_data_dir
会尝试找到离它最近的 scrapy.cfg
文件,并用这个文件来推测项目的数据目录。