为什么scrapyd中禁用了HttpCacheMiddleware?

3 投票
1 回答
678 浏览
提问于 2025-04-18 09:05

为什么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 文件,并用这个文件来推测项目的数据目录。

撰写回答