如何让芹菜在heroku和django-dynamic-scraper上使用scrapy服务器?

时间:2014-10-18 03:05:15

标签: django scrapy celery django-celery django-dynamic-scraper

我正在建立我的第一个包含scrapy的项目。一切都在我的开发服务器(Windows)上运行良好,但在heroku上有一些问题。我正在使用django-dynamic-scraper来处理我的整合工作。

在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] celery@081b4100-eb7f-441c-976d-ecf97d2d7e5a ready.
: INFO/Beat] Writing entries...
: INFO/Beat] Writing entries...

第一个问题:当触发运行蜘蛛的周期性任务时,我在芹菜日志中收到以下错误。

    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 个答案:

答案 0 :(得分:1)

答案是:您无法在同一主机上运行您的Web应用程序,芹菜和scrapy服务器,并允许它们相互通信。但是,使用heroku有两种方法可以完成此设置。

选项1:

  1. 使用scrapy-heroku将scrapy服务器部署到名为“myapp-scrapy.herokuapp.com”的主机。
  2. 然后将您的django-scrapy应用程序部署到另一个名为“myapp.herokuapp.com”的主机上。
  3. 在django-dynamic-scraper中打开task_utls.py并将所有localhost:6800更改为myapp-scrapy.herokuapp.com
  4. 选项2:

    1. 只需使用heroku的调度程序,就像在命令行上一样手动调用您的scraper。您将绕过所有动态调度功能,但对于某些用例来说还不错。
    2. 我希望这可以帮助别人省下一些痛苦。