2010-09-12 9 views
5

Esto es solo para mi proyecto/estudio de fin de semana, soy muy nuevo en Sinatra y MongoDB.Ruby Sinatra - conecta con mongoDB en mongoHQ fallido

He instalado las gemas de mongoDB, como: mongo, mongo_mapper y mongoid.

Cuando intenté conectar a mi base de datos en MongoHQ de localhost, se encontró un error de este tipo:

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

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

encontré a similar thread on SO, pero hablando francamente, no entiendo muy bien las respuestas ...

Aquí es mi fragmento de código:

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 

Tomé el código anterior de here, pero no parece trabajar ...

¿Qué parte está mal? Hay otra manera de hacer esto? Al final, esta aplicación web de prueba se implementará en heroku, así que espero que la solución pueda funcionar tanto con localhost como con mi servidor heroku.

Actualizado:

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

Pero todavía tiene el error, después de tiempo de espera:

$ 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 

El nombre de host y el puerto están de acuerdo con la documentación mongoHQ, por lo que debe ser correcto.

Gracias por la ayuda con antelación.

segunda actualización:

Acabo de probar la cadena de conexión con el terminal mongodb:

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

Desafortunadamente esto me llevaría un fallo de conexión de error, la verdad, no sé qué .. .

Respuesta

8

utilizo

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) 

Puede buscar su url mongo utilizando el comando heroku config --long

0

acaba de dar a esta otra oportunidad, esta vez, yo estaba usando la dirección IP tomada de ping:

Así, si cambio:

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

Para:

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

que funcionará ...

Todavía no entiendo por qué el enfoque de nombre de dominio no va a funcionar, pero al menos puedo terminar esto :)