5

これは私の週末のプロジェクト/研究のためだけのものです。私は Sinatra と MongoDB に非常に慣れていません。

mongo、mongo_mapper、mongoid などの mongoDB 用の gem をインストールしました。

localhost から MongoHQ のデータベースに接続しようとすると、次のようなエラーが発生しました。

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

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

SO で同様のスレッドを見つけましたが、率直に言って、答えがよくわかりません...

ここに私のコードスニペットがあります:

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

残念ながら、これにより接続失敗エラーが発生します。正直なところ、理由はわかりません...

4

2 に答える 2

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 URLを検索できます

于 2010-12-14T04:13:48.730 に答える
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')

それはうまくいくでしょう...

ドメイン名アプローチが機能しない理由はまだわかりませんが、少なくともこれを終わらせることはできます:)

于 2010-09-14T10:16:19.843 に答える