Ruby Sinatra - не удалось подключиться к mongoDB на mongoHQ - PullRequest
5 голосов
/ 12 сентября 2010

Это только для моего проекта / учебы на выходных, я очень новичок в Синатре и MongoDB.

Я установил гемы для mongoDB, такие как: mongo, mongo_mapper и mongoid.

Когда я пытался подключиться к своей базе данных в 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

Я взял приведенный выше код с здесь , но, похоже, он не работает ...

Какая часть не так? Есть ли другой способ сделать это? В конце концов, это тестовое веб-приложение будет развернуто на 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

К сожалению, это может привести к ошибке подключения, честно, я не знаю, почему ...

Ответы [ 2 ]

8 голосов
/ 14 декабря 2010

Я использую

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)

Вы можете посмотреть свой монго URL, используя команду heroku config --long

0 голосов
/ 14 сентября 2010

Просто дал еще одну попытку, на этот раз я использовал IP-адрес, полученный от ping:

Итак, если я изменю:

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

Это сработает ...

Я до сих пор не понимаю, почему подход с использованием доменных имен не сработает, но, по крайней мере, я могу закончить это:)

...