Почему HttpCacheMiddleware отключен в scrapyd?

Зачем HttpCachedMiddleware нужен scrapy.cfg и как обойти эту проблему?

Я использую scrapyd-deploy для сборки яйца и запускаю проект в scrapyd.

Когда задание запущено, я вижу из вывода журнала, что HttpCacheMiddleware отключен, потому что scrapy.cfg не найден.

2014-06-08 18:55:51-0700 [scrapy] ПРЕДУПРЕЖДЕНИЕ. Отключено HttpCacheMiddleware: невозможно найти файл scrapy.cfg для определения каталога данных проекта.

Я проверяю файл яйца, и scrapy.cfg действительно отсутствует, потому что файл яйца состоит только из файлов в каталоге проекта. Я могу ошибаться, но я думаю, что яйцо построено правильно.

foo/
 |- project/
 |      |- __init__.py
 |      |- settings.py
 |      |- spiders/
 |            |- ...
 |- scrapy.cfg

Покопавшись в коде, я думаю, что один из трех 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])

person Sam    schedule 09.06.2014    source источник


Ответы (1)


Поместите пустой scrapy.cfg в свой рабочий каталог.

Как видно из исходного кода, project_data_dir попытается чтобы найти ближайший scrapy.cfg и использовать его для определения каталога данных проекта.

person Answeror    schedule 08.07.2014
comment
Я думаю, что даже опустошение scrapy.cfg не решит проблему. Когда паук развертывается как яйцо в scrapyd, файл scrapy.cfg фактически не включается. Я думаю, что код просто отключит промежуточное программное обеспечение, когда местоположение недетерминировано. Единственный способ заставить его работать — жестко закодировать абсолютный путь. - person Sam; 09.07.2014
comment
@Sam Пустой scrapy.cfg должен быть помещен под то место, где вы запускаете scrapyd. Да, scrapy.cfg в корне проекта scrapy не включен в яйцо, но во время выполнения scrapyd сначала будет искать scrapy.cfg в рабочем каталоге. Если не представлен, он попробует другие места. Проверено на scrapy 0.22.2 и scrapyd 1.0.1. - person Answeror; 09.07.2014
comment
Ах, теперь я понимаю, что вы имели в виду, имея пустой scrapy.cfg только для того, чтобы позволить scrapyd определить местоположение. Спасибо за объяснение. - person Sam; 10.07.2014