2010-09-12 13 views
5

To jest tylko dla mojego weekendowego projektu/badania, jestem bardzo nowy w Sinatrze i MongoDB.Ruby Sinatra - połącz z mongoDB na mongoHQ nie powiodło się

Zainstalowałem klejnoty dla mongoDB, takie jak: mongo, mongo_mapper i mongoid.

Kiedy próbowałem podłączenia do mojej bazy danych na MongoHQ z localhost, że spotkałem takiego błędu:

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

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

znalazłem a similar thread on SO, ale szczerze mówiąc, nie bardzo rozumiem odpowiedź ...

Tu jest mój urywek kodu:

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 

wziąłem powyższy kod z here, ale wydaje się nie działa ...

Która część jest nieprawidłowa? Czy jest inny sposób na zrobienie tego? W końcu ta aplikacja testowa zostanie wdrożona na heroku, więc mam nadzieję, że rozwiązanie będzie działać zarówno z serwerem lokalnym, jak i moim serwerem heroku.

Aktualizacja:

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

Ale wciąż mam ten błąd, po 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 

Nazwa hosta i port są zgodnie z dokumentacją mongoHQ, więc muszą mieć rację.

Dzięki za pomoc z góry.

2-ty Aktualizacja:

Właśnie testowany ciąg połączenia MongoDB użyciu terminala:

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

Niestety byłoby to po mnie połączenie nie powiodło się błąd, szczerze mówiąc, nie wiem dlaczego .. .

Odpowiedz

8

używam

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) 

Możesz wyszukać adres URL mongo, korzystając z polecenia heroku config --long

0

prostu dał to kolejną szansę, tym razem, byłem przy użyciu adresu iP pochodzący z ping:

Tak więc, jeśli zmienię:

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

Do:

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

To zadziała ...

ja nadal nie rozumiem, dlaczego podejście nazwa domeny nie będzie działać, ale przynajmniej mogę to skończyć :)

Powiązane problemy