【问题标题】:Ruby Sinatra - connect to mongoDB on mongoHQ failedRuby Sinatra - 在 mongoHQ 上连接到 mongoDB 失败
【发布时间】:2011-04-11 05:53:27
【问题描述】:

这只是为了我的周末项目/学习,我对 Sinatra 和 MongoDB 非常陌生。

我已经为 mongoDB 安装了 gem,例如:mongo、mongo_mapper 和 mongoid。

当我尝试从 localhost 连接到 MongoHQ 上的数据库时,遇到了这样的错误:

Mongo::ConnectionFailure at /
failed to connect to any given host:port

    * file: connection.rb
    * location: connect
    * line: 489

我找到了a similar thread on SO,但坦率地说,我不太明白答案...

这是我的代码 sn-p:

require 'rubygems'
require 'sinatra'
require 'mongo'
require 'mongo_mapper'

get '/' do
  MongoMapper.connection = Mongo::Connection.new('flame.mongohq.com', 27044)
  MongoMapper.database = 'notes'
  MongoMapper.database.authenticate('foo', 'bar')
  erb :list
end

我从here获取了上面的代码,但它似乎不起作用......

哪一部分错了?还有另一种方法可以做到这一点吗?最后,这个测试网络应用程序将部署到 heroku 上,所以我希望该解决方案可以与 localhost 和我的 heroku 服务器一起使用。

更新:

I just created a minimal code snippet to test the mongodb connection:
require 'rubygems'
require 'mongo'

db = Mongo::Connection.new("flame.mongohq.com", 27044).db("notes")

但是超时后还是报错:

$ ruby mongodbtest.rb 
/Library/Ruby/Gems/1.8/gems/mongo-1.0.8/lib/../lib/mongo/connection.rb:489:in
`connect': failed to connect to any given host:port (Mongo::ConnectionFailure)
from /Library/Ruby/Gems/1.8/gems/mongo-1.0.8/lib/../lib/mongo/connection.rb:137:in
`initialize'
from mongodbtest.rb:4:in `new'
from mongodbtest.rb:4

主机名和端口是根据mongoHQ文档的,所以一定是对的。

提前感谢您的帮助。

第二次更新

我刚刚使用终端测试了 mongodb 连接字符串:

mongo mongodb://flame.mongohq.com:27044/notes -u foo -p bar

不幸的是,这会给我一个连接失败错误,老实说,我不知道为什么......

【问题讨论】:

    标签: ruby mongodb sinatra heroku mongomapper


    【解决方案1】:

    我用

    uri =  URI.parse(ENV['MONGOHQ_URL'])
    @mongo_connection = Mongo::Connection.from_uri( uri )
    @mongo_db = @mongo_connection.db(uri.path.gsub(/^\//, ''))
    @mongo_db.authenticate(uri.user, uri.password)
    

    您可以使用 heroku config --long 命令查找您的 mongo 网址

    【讨论】:

      【解决方案2】:

      又试了一次,这次我使用的是从 ping 获取的 ip 地址:

      所以,如果我改变:

      db = Mongo::Connection.new('flame.mongohq.com', 27060).db("notes")
      db.authenticate('fake', 'info')
      

      收件人:

      db = Mongo::Connection.new('184.73.224.5', 27060).db("notes")
      db.authenticate('fake', 'info')
      

      这样就行了……

      我仍然不明白为什么域名方法不起作用,但至少我可以完成这个:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        相关资源
        最近更新 更多