2014-10-18 30 views
0

我正在構建我的第一個包含scrapy的項目。在我的開發服務器(Windows)上一切正常,但在heroku上有一些問題。我正在使用爲我處理整合工作的django-dynamic-scraper。如何在heroku和django-dynamic-scraper上使用scrapy服務器上的芹菜工作?

在Windows上我運行在單獨的命令下面的命令提示:

: scrapy server 
: python manage.py celeryd -l info 
: python manage.py celerybeat 

在Heroku我運行以下命令:

: heroku bash >heroku run scrappy server (solves app not found issue) 
: heroku run python manage.py celeryd -l info -B --settings=myapp.production 

實際dejango應用程序有沒有錯誤或問題,我可以訪問管理網站。鬥志旺盛的服務器上運行:

: Scrapyd web console available at http://0.0.0.0:6800/ 
: [Launcher] Scrapyd started: max_proc=16, runner='scrapyd.runner' 
: Site starting on 6800 
: Starting factory <twisted.web.server.Site instanceat 0x7f1511f62ab8> 

和芹菜節拍和工人正在工作:

: INFO/Beat] beat: Starting... 
: INFO/Beat] Writing entries... 
: INFO/MainProcess] Connected to django://guest:**@localhost:5672// 
: WARNING/MainProcess] [email protected] ready. 
: INFO/Beat] Writing entries... 
: INFO/Beat] Writing entries... 

FIRST ISSUE:當週期性任務運行的蜘蛛被觸發我在芹菜日誌中出現以下錯誤。

File "/app/.heroku/python/lib/python2.7/site-packages/dynamic_scraper/utils/ta 
    sk_utils.py", line 31, in _pending_jobs 
     resp = urllib2.urlopen('http://localhost:6800/listjobs.json?project=default') 
    ... 
    ... 

    File "/app/.heroku/python/lib/python2.7/urllib2.py", line 1184, in do_open 
     raise URLError(err) 
    URLError: <urlopen error [Errno 111] Connection refused> 

因此,似乎由於某種原因,heroku不允許芹菜訪問scrapy服務器。

下面是我的一些設置:

scrapy.cfg

[settings] 
default = myapp.scraper.scrape.settings 

[deploy] 
#url = http://localhost:6800/ 
project = myapp 

芹菜配置提前

[config] 
    app:   default:0x7fd4983f6310 (djcelery.loaders.DjangoL 
    transport: django://guest:**@localhost:5672// 
    results:  database 
    concurrency: 4 (prefork) 
[queues] 
    celery  exchange=celery(direct) key=celery 

感謝,讓我知道如果你需要任何更多的信息。

回答

1

答案是:你不能在同一臺主機上運行的Web應用程序,芹菜,以及scrapy服務器,讓他們互相交談。但是,有兩種方法可以使用heroku完成此設置。

選項1:

  1. 使用scrapy-heroku您scrapy服務器部署到一個名爲 「myapp-scrapy.herokuapp.com」 主持人。
  2. 然後將您的django-scrapy應用程序部署到另一個名爲「myapp.herokuapp.com」的主機。
  3. 在Django動態刮刀開放task_utls.py和改變localhost:6800所有出現myapp-scrapy.herokuapp.com

選項2:

  1. 只需使用Heroku的調度手動調用你的刮削器,你會在命令行上。你將繞過所有的動態調度功能,但對於一些用例來說很好。

我希望這可以幫助別人節省一些痛苦。

相關問題