为什么在scrapyd中禁用HttpCacheMiddleware?

时间:2014-06-09 03:05:00

标签: python scrapy scrapyd

为什么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])

1 个答案:

答案 0 :(得分:1)

在您的工作目录下放置一个空的scrapy.cfg

正如source code所示,project_data_dir会尝试找到最接近的scrapy.cfg并使用它来推断项目数据目录。