1

我正在构建我的第一个包含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...

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

    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

提前致谢,如果您需要更多信息,请告诉我。

4

1 回答 1

1

答案是:你不能在同一台主机上运行你的 web 应用程序、celery 和 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:6800to myapp-scrapy.herokuapp.com

选项 2:

  1. 只需使用 heroku 的调度程序手动调用您的爬虫,就像在命令行上一样。您将绕过所有动态调度功能,但对于某些用例来说这很好。

我希望这可以帮助某人减轻一些痛苦。

于 2014-11-15T08:04:17.903 回答