2010-09-12 44 views
5

這只是爲了我週末的項目/學習,我對Sinatra和MongoDB非常陌生。Ruby Sinatra - 連接到mongoHQ上的mongoDB失敗

我已經安裝了mongoDB的gem,比如:mongo,mongo_mapper和mongoid。

當我試圖連接到我的數據庫MongoHQ從本地主機,它遇到了這樣的錯誤:

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

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

我發現​​,但坦白說,我不太明白的答案...

這裏是我的代碼片段:

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,但似乎不工作...

哪部分是錯誤的?有沒有另一種方法來做到這一點?最後,這個測試Web應用程序將部署到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文件,所以他們一定是對的。

感謝您的幫助提前。

月2日更新

我只是使用終端測試MongoDB的連接字符串:

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

不幸的是,這將讓我一個連接失敗的錯誤,說實話,我不知道爲什麼..

回答

8

我用

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網址

0

剛剛再次嘗試這次,我這次使用的是從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') 

,將工作...

我還是不明白爲什麼域名的做法是行不通的,但至少我可以完成這個功能:)