2014-06-09 16 views
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]) 

回答

1

在您的工作目錄下放置一個空的scrapy.cfg

由於source code顯示,project_data_dir將嘗試找到最接近的scrapy.cfg並使用它來推斷項目數據目錄。

+0

我認爲即使清空'scrapy.cfg''' wounld沒有解決問題。當蜘蛛作爲egg被部署到scrapyd時,實際上不包括''scrapy.cfg'''文件。我認爲當代碼不確定時,代碼會禁用中間件。使其工作的唯一方法是硬編碼絕對路徑。 – Sam

+0

@Sam空的'scrapy.cfg'被放置在你運行'scrapyd'的地方。是的,scrapy項目根中的'scrapy.cfg'不包含在egg中,但是在運行時,'scrapyd'將首先從工作目錄中尋找'scrapy.cfg'。如果沒有呈現,它會嘗試其他地方。測試scrapy'0.22.2'和scrapyd'1.0.1'。 – Answeror

+0

啊,我看到你現在的意思是有一個空的'''scrapy.cfg''只是讓瑞德來確定位置。感謝您的解釋。 – Sam