Mongodb pymongo.errors.ConnectionFailure:运行scrapyd的ubuntu ec2实例超时

Mongodb pymongo.errors.ConnectionFailure:运行scrapyd的ubuntu ec2实例超时,mongodb,amazon-ec2,scrapy,pymongo,scrapyd,Mongodb,Amazon Ec2,Scrapy,Pymongo,Scrapyd,所以。。。我在我的UbuntuEC2实例上运行scrapyd,完成以下文章: 但是我想我无法让pymongo连接到我的MongoLabs mongo数据库,因为ubuntu ec2剪贴簿上说 pymongo.errors.ConnectionFailure: timed out 我是一个真正的noob当谈到后端的东西,所以我真的不知道什么可能会导致这个问题。当我从localhost运行我的scrapyd时,它工作得非常好,并将刮取的数据保存到我的数据库中。对于在ec2实例上运行的scrapyd

所以。。。我在我的UbuntuEC2实例上运行scrapyd,完成以下文章:

但是我想我无法让pymongo连接到我的MongoLabs mongo数据库,因为ubuntu ec2剪贴簿上说

pymongo.errors.ConnectionFailure: timed out
我是一个真正的noob当谈到后端的东西,所以我真的不知道什么可能会导致这个问题。当我从localhost运行我的scrapyd时,它工作得非常好,并将刮取的数据保存到我的数据库中。对于在ec2实例上运行的scrapyd,我可以通过在端口6800(相当于scrapyd的localhost:6800)键入ec2地址来访问scrapyd gui,但仅此而已。冰壶

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
有人对我的问题有一些有用的见解吗?谢谢

编辑:添加了连接代码。 设置.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

我解决了这个问题。最初,我将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 db的实际端口,它应该是这样的

Type:Custom, Protocol: TCP, Port Range: 38839, Destination: 0.0.0.0/0

你有没有可能用这个连接到Mongo?你能发布你的mongo连接设置吗?不,只有pymongo。我现在已经更新了。你能从EC2实例运行
telnet asdf.mongolab.com 38839
并发布你看到的吗?好的。。它只是说
尝试ip.stuff.number.here…
大约2分钟。然后它说,
telnet:无法连接到远程主机:连接超时
好的,我知道了。。。我已经发布了我的答案。谢谢你的建议,里科!你肯定是在正确的轨道上。