Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby Sinatra - connect to mongoDB on mongoHQ failed

This is just for my weekend project/study, I am very new to Sinatra and MongoDB.

I've installed the gems for mongoDB, such as: mongo, mongo_mapper and mongoid.

When I tried connecting to my database on MongoHQ from localhost, it encountered such an error:

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

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

I found a similar thread on SO, but frankly speaking, I don't quite understand the answers...

Here is my code snippet:

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

I took the above code from here, but it seems not working...

Which part is wrong? Is there another way to do this? In the end this test web app will be deployed onto heroku, so I hope the solution can work with both localhost and my heroku server.

Updated:

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")

But still got the error, after timeout:

$ 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

The hostname and port are according to mongoHQ documentation, so they must be right.

Thanks for the help in advance.

2nd Update:

I just tested the mongodb connection string using terminal:

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

Unfortunately this would get me an connection failed error, honestly, I don't know why...

like image 610
Michael Mao Avatar asked Sep 12 '10 02:09

Michael Mao


1 Answers

I use

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)

You can look up your mongo url using the heroku config --long command

like image 119
Steve Wilhelm Avatar answered Nov 14 '22 23:11

Steve Wilhelm