2010-09-12 7 views
5

Ceci est juste pour mon projet de week-end/étude, je suis très nouveau à Sinatra et MongoDB.Ruby Sinatra - se connecter à mongoDB sur mongoHQ échoué

J'ai installé les gemmes pour mongoDB, telles que: mongo, mongo_mapper et mongoid.

Quand j'ai essayé la connexion à ma base de données sur MongoHQ de localhost, il a rencontré une telle erreur:

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

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

J'ai trouvé a similar thread on SO, mais franchement, je ne comprends pas tout à fait les réponses ...

Voici mon extrait de code:

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 

Je pris le code ci-dessus de here, mais il semble ne fonctionne pas ...

Quelle est la pièce défectueuse? Y a-t-il une autre façon de faire cela? À la fin, cette application web de test sera déployée sur heroku, donc j'espère que la solution peut fonctionner à la fois avec localhost et mon serveur heroku.

Mise à jour:

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

Mais encore obtenu l'erreur, après le délai:

$ 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 

Le nom d'hôte et le port sont selon la documentation mongoHQ, donc ils doivent avoir raison.

Merci pour l'aide à l'avance.

2ème mise à jour:

Je viens de tester la chaîne de connexion MongoDB en utilisant la borne:

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

Malheureusement, ce serait me faire une erreur connexion a échoué, honnêtement, je ne sais pas pourquoi .. .

Répondre

8

J'utilise

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) 

Vous pouvez rechercher votre URL mongo à l'aide de la commande heroku config --long

0

vient de donner ce nouvel essai, cette fois-ci, j'utilise l'adresse IP prise de ping:

Donc, si je change:

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

Pour:

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

qui fonctionnera ...

Je ne comprends toujours pas pourquoi l'approche du nom de domaine ne fonctionnera pas, mais au moins je peux terminer cette off :)