【问题标题】:Why is HttpCacheMiddleware disabled in scrapyd?为什么在 scrapyd 中禁用 HttpCacheMiddleware?
【发布时间】:2014-06-09 03:04:59
【问题描述】:

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

【问题讨论】:

    标签: python scrapy scrapyd


    【解决方案1】:

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

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

    【讨论】:

    • 我认为即使清空scrapy.cfg 也无法解决问题。当蜘蛛作为鸡蛋部署到scrapyd时,文件scrapy.cfg实际上是不包括在内的。我认为当位置不确定时,代码只会禁用中间件。使其工作的唯一方法是硬编码绝对路径。
    • @Sam 空的scrapy.cfg 将放在运行scrapyd 的位置下。是的,scrapy 项目根目录中的scrapy.cfg 不包含在 egg 中,但是在运行时,scrapyd 会首先从工作目录中寻找scrapy.cfg。如果没有提出,它会尝试其他地方。在scrapy 0.22.2 和scrapyd 1.0.1 上测试。
    • 啊,我明白你现在的意思了,现在有一个空的scrapy.cfg 只是为了让scrapyd 确定位置。谢谢你的解释。
    猜你喜欢
    • 2013-03-22
    • 2013-04-08
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多