2
爲什麼HttpCachedMiddleware需要scrapy.cfg,我該如何解決這個問題?爲什麼在scrapyd中禁用HttpCacheMiddleware?
我使用scrapyd-deploy
來建造雞蛋,並將項目部署到scrapyd。
作業運行時,我從日誌輸出中看到HttpCacheMiddleware被禁用,因爲scrapy.cfg未找到。
2014年6月8日18:55:51-0700 [scrapy]警告:禁用HttpCacheMiddleware:無法找到scrapy.cfg文件來推斷項目數據目錄
我檢查雞蛋的文件和scrapy.cfg確實不存在,因爲egg文件只包含項目目錄中的文件。我可能是錯的,但我認爲雞蛋是正確搭建的。
foo/
|- project/
| |- __init__.py
| |- settings.py
| |- spiders/
| |- ...
|- scrapy.cfg
挖入code多了,我想如果條件在某種程度上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])
我認爲即使清空'scrapy.cfg''' wounld沒有解決問題。當蜘蛛作爲egg被部署到scrapyd時,實際上不包括''scrapy.cfg'''文件。我認爲當代碼不確定時,代碼會禁用中間件。使其工作的唯一方法是硬編碼絕對路徑。 – Sam
@Sam空的'scrapy.cfg'被放置在你運行'scrapyd'的地方。是的,scrapy項目根中的'scrapy.cfg'不包含在egg中,但是在運行時,'scrapyd'將首先從工作目錄中尋找'scrapy.cfg'。如果沒有呈現,它會嘗試其他地方。測試scrapy'0.22.2'和scrapyd'1.0.1'。 – Answeror
啊,我看到你現在的意思是有一個空的'''scrapy.cfg''只是讓瑞德來確定位置。感謝您的解釋。 – Sam