pymongo.errors.ConnectionFailure: истекло время ожидания экземпляра ubuntu ec2, на котором запущен scrapyd

Итак ... Я запускаю scrapyd на своем экземпляре ubuntu ec2 после этого сообщения: http://www.dataisbeautiful.io/deploying-scrapy-ec2/

однако я думаю, я не могу заставить pymongo подключиться к моей базе данных MongoLabs mongo, поскольку журналы scrapyd ubuntu ec2 говорят

pymongo.errors.ConnectionFailure: timed out

Когда дело доходит до серверной части, я настоящий новичок, поэтому я понятия не имею, что может вызвать эту проблему. Когда я запускаю свой scrapyd с localhost, он работает полностью нормально и сохраняет очищенные данные в моей базе данных MongoLabs. Для моего scrapyd, запущенного на экземпляре ec2, я могу получить доступ к scrapyd gui, набрав адрес ec2 на порту 6800 (эквивалентно scrapyd localhost: 6800), но это все. Вьющийся

curl http://aws-ec2-link:6800/schedule.json -d project=sportslab_scrape -d spider=max -d max_url="http://www.maxpreps.com/high-schools/de-la-salle-spartans-(concord,ca)/football/stats.htm"

возвращает 'status': 'ok', и я вижу, что задание отображается, но никаких элементов не производится, а в журнале отображается только

2014-11-17 02:20:13+0000 [scrapy] INFO: Scrapy 0.24.4 started (bot: sportslab_scrape_outer)
2014-11-17 02:20:13+0000 [scrapy] INFO: Optional features available: ssl, http11
2014-11-17 02:20:13+0000 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'sportslab_scrape.spiders', 'SPIDER_MODULES': ['sportslab_scrape.spiders'], 'FEED_URI': 'items/sportslab_scrape/max/4299afa26e0011e4a543060f585a893f.jl', 'LOG_FILE': 'logs/sportslab_scrape/max/4299afa26e0011e4a543060f585a893f.log', 'BOT_NAME': 'sportslab_scrape_outer'}
2014-11-17 02:20:13+0000 [scrapy] INFO: Enabled extensions: FeedExporter, LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState
2014-11-17 02:20:13+0000 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats
2014-11-17 02:20:13+0000 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware

У кого-нибудь есть полезные идеи по моей проблеме? Спасибо!

изменить: добавлен код подключения. Settings.py

MONGODB_HOST = 'mongodb://user:[email protected]:38839/sportslab_mongodb' 
MONGODB_PORT = 38839 # Change in prod
MONGODB_DATABASE = "sportslab_mongodb" # Change in prod
MONGODB_COLLECTION = "sportslab"

Scrapy's Pipeline.py

from pymongo import Connection
from scrapy.conf import settings

class MongoDBPipeline(object):
    def __init__(self):
        connection = Connection(settings['MONGODB_HOST'], settings['MONGODB_PORT'])
        db = connection[settings['MONGODB_DATABASE']]
        self.collection = db[settings['MONGODB_COLLECTION']]
    def process_item(self, item, spider):
        self.collection.insert(dict(item))
        return item

person pyramidface    schedule 17.11.2014    source источник
comment
Вы случайно не используете это для подключения к Mongo? github.com/sebdah/scrapy-mongodb Можете ли вы опубликовать настройки подключения mongo?   -  person Rico    schedule 17.11.2014
comment
Нет, просто пимонго. Я его сейчас обновил.   -  person pyramidface    schedule 17.11.2014
comment
Можете ли вы запустить telnet asdf.mongolab.com 38839 из экземпляра EC2 и опубликовать то, что вы видите?   -  person Rico    schedule 18.11.2014
comment
Хорошо, так .. он просто говорит Trying ip.stuff.numbers.here... примерно 2 минуты. Затем написано telnet: Unable to connect to remote host: Connection timed out   -  person pyramidface    schedule 18.11.2014
comment
Итак, у вас есть правило брандмауэра, не позволяющее ему подключаться извне. У вас есть шанс запустить iptables на своем экземпляре?   -  person Rico    schedule 18.11.2014
comment
Хорошо, я разобрался ... и опубликовал свой ответ. Спасибо за все твои предложения, Рико! Вы определенно были на правильном пути.   -  person pyramidface    schedule 19.11.2014


Ответы (1)


Я решил проблему. Первоначально я установил исходящие правила группы безопасности своей ec2 как:

Outbound
Type:HTTP, Protocol: TCP, Port Range:80, Destination: 0.0.0.0/0
Type:Custom, Protocol: TCP, Port Range: 6800, Destination: 0.0.0.0/0
Type:HTTPS, Protocol: TCP, Port Range:443, Destination 0.0.0.0/0

Однако этого было недостаточно, поскольку мне также нужен был конкретный настраиваемый протокол TCP для фактического порта базы данных mongolab, к которой я подключался, которая должна выглядеть так ...

Type:Custom, Protocol: TCP, Port Range: 38839, Destination: 0.0.0.0/0
person pyramidface    schedule 18.11.2014