pymongo.errors.ConnectionFailure: истекло время ожидания для экземпляра ubuntu ec2, на котором выполняется scrapyd
Итак... я запускаю scrapyd на своем экземпляре ubuntu ec2 после того, как прочитал этот пост: http://www.dataisbeautiful.io/deploying-scrapy-ec2/
однако, я думаю, я не могу заставить pymongo подключиться к моей базе данных MongoLabs mongo, так как логи ubuntu ec2 scrapyd говорят
pymongo.errors.ConnectionFailure: timed out
Я настоящий нуб, когда дело доходит до бэк-энда, поэтому я не имею ни малейшего представления, что может быть причиной этой проблемы. Когда я запускаю мой scrapyd с localhost, он работает совершенно нормально и сохраняет очищенные данные в моей базе данных MongoLabs. Для моего scrapyd, работающего на экземпляре ec2, я могу получить доступ к графическому интерфейсу scrapyd, введя адрес ec2 на порту 6800 (эквивалентно localhost scrapyd: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"
возвращает "статус": "все в порядке", и я вижу, как появляется задание, но элементы не создаются, а журнал показывает только
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:pass@asdf.mongolab.com: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
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 для действительного порта моноблока db, к которому я подключался, который должен выглядеть следующим образом...
Type:Custom, Protocol: TCP, Port Range: 38839, Destination: 0.0.0.0/0