heroku mongohq и mongoid Mongo::ConnectionFailure

ОБНОВЛЕНИЕ 9 июня 2012 г.:

Настройка с mongoid 3.0.0.rc на героку, см. суть: https://gist.github.com/2900804

ОБНОВЛЕНИЕ от 22 января 2011 г.:

Uri теперь имеет приоритет в mongoid.yml

https://github.com/mongoid/mongoid/issues/issue/266

ОБНОВЛЕНИЕ 12 августа 2010 г .: Хотя 6 мая я получил принятый ответ от Джекуса Крокера, есть аспекты этой проблемы, из-за которых легко все испортить! Это случилось со мной еще раз, и я решил исследовать исходный код mongoid. Итак, вот оно:

В настоящее время параметры host: port: name/database: ИМЕЮТ ПРИОРИТЕТ НАД параметром uri:. Следовательно, ужасно неинформативное сообщение об ошибке возникает из-за на запрос к localhost:xxxx, а не к flame.local.mongohq.com:xxxx

Это сломается!

defaults: &defaults
  host: localhost  <- THIS 'OVERWRITES' host in the uri!

production:
  <<: *defaults    <- BE CAREFUL WITH WHAT YOU BRING IN. THE host: FROM DEFAULTS WILL BE THE ONE APPLIED, not your uri host.
  uri: <%= ENV['MONGOHQ_URL'] %>

исправить это, удалив host: в настройках по умолчанию и/или удалив ‹‹: *defaults


ОРИГИНАЛЬНЫЙ ВОПРОС:

Я добавил дополнение mongoHQ для mongodb в героку. Он падает с:

connect_to_master': failed to connect to any given host:port (Mongo::ConnectionFailure)

Описания в Интернете (heroku mongohq) больше ориентированы на mongomapper, насколько я понимаю. Я запускаю ruby ​​1.9.1 и rails 3-beta с mongoid.

Я чувствую, что есть что-то с ENV['MONGOHQ_URL'], которое, как говорится, устанавливает аддон MongoHQ, но я нигде не устанавливал MONGOHQ_URL в своем приложении. Я предполагаю, что проблема в моем mongoid.yml?

defaults: &defaults
  host: localhost

development:
  <<: *defaults
  database: aliado_development

test:
  <<: *defaults
  database: aliado_test

# set these environment variables on your prod server
production:
  <<: *defaults
  host: <%= ENV['MONGOID_HOST'] %>
  port: <%= ENV['MONGOID_PORT'] %>
  username: <%= ENV['MONGOID_USERNAME'] %>
  password: <%= ENV['MONGOID_PASSWORD'] %>
  database: <%= ENV['MONGOID_DATABASE'] %>

Он отлично работает локально, но не работает на героку, больше трассировки стека:

==> crashlog.log <==
Cannot write to outdated .bundle/environment.rb to update it
/disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/rack-1.1.0/lib/rack.rb:14: warning: already initialized constant VERSION
/disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongo-0.20.1/lib/mongo/connection.rb:435:in `connect_to_master': failed to connect to any given host:port (Mongo::ConnectionFailure)
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongo-0.20.1/lib/mongo/connection.rb:112:in `initialize'
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4
/lib/mongoid/railtie.rb:32:in `new'
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4/lib/mongoid/railtie.rb:32:in `block (2 levels) in <class:Railtie>'
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4/lib/mongoid.rb:110:in `configure'
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4/lib/mongoid/railtie.rb:21:in `block in <class:Railtie>'
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/railties-3.0.0.beta3/lib/rails/initializable.rb:25:in `instance_exec'
.....

Все работает локально, и тесты, и приложение. У меня нет идей... Любые предложения?

PS: Кто-то с высоким уровнем репутации создал тег «mongohq»?


person oma    schedule 06.05.2010    source источник


Ответы (4)


Mongoid (мастер) теперь имеет параметр URI в mongoid.yml. Итак, вы можете сделать:

production:
  uri: <%= ENV['MONGOHQ_URL'] %>

Чтобы использовать mongoid master в своем проекте, установите его в своем Gemfile

gem "mongoid", :git => "[email protected]:mongoid/mongoid.git"

Надеюсь, скоро выйдет новый драгоценный камень, который все исправит.

person Jacques Crocker    schedule 06.05.2010
comment
Исправление uri, похоже, еще не работает. Я нашел билет/проблему на github.com/durran/mongoid и его источник ragingonrails.com/post/566548996/ . Я делал так же, манипулируя ENV для порта, хоста и так далее. Это сработало! - person oma; 07.05.2010
comment
Этот ответ помечен как правильный. Для других, испытывающих то же самое, обратите внимание, что мне пришлось настроить некоторые из них самостоятельно. Также должно быть :git => git://github.com/durran/mongoid.git - person oma; 07.05.2010
comment
Теперь нужно использовать production > sessions > default > uri - обновил ответ, чтобы он соответствовал. - person chrismdp; 21.09.2012

Мне кажется, что указание хоста в хеше по умолчанию переопределяет значение в uri. Чтобы это исправить, просто удалите хост по умолчанию, вот мой config/mongo.yml:

defaults: &defaults
  allow_dynamic_fields: true
  parameterize_keys: true
  persist_in_safe_mode: true
  raise_not_found_error: true
  reconnect_time: 3
  use_object_ids: true

production:
  <<: *defaults
  uri: <%= ENV['MONGOHQ_URL'] %>

Вот фрагмент из config.rb mongoid:

  mongo_uri = settings["uri"].present? ? URI.parse(settings["uri"]) : OpenStruct.new

  name = settings["database"] || mongo_uri.path.to_s.sub("/", "")
  host = settings["host"] || mongo_uri.host || "localhost" # <= look here
  port = settings["port"] || mongo_uri.port || 27017
person Kliment Mamykin    schedule 31.05.2010

У нас есть несколько монгоидных документов в разделе нашей документации, посвященном героку. Официально они еще не выпущены, но вы уже можете это сделать. Пока не ожидайте многого в отношении стилей и контента, но в нем есть некоторая информация, которая может оказаться полезной для монгоидов.

https://devcenter.heroku.com/articles/mongohq

person Ben    schedule 07.05.2010

Просто обратите внимание, что у меня это работает без каких-либо проблем, как рекламируется на http://mongoid.github.com/docs/installation/

Gemfile:

gem "rails", '3.0.0.beta3'
gem "mongoid", "2.0.0.beta4"
gem "bson_ext", "0.20.1"

mongoid.yml:

host: xxx.mongohq.com
port: xxx
database: db
username: user
password: xxx
person Jason    schedule 10.05.2010
comment
откуда ты знаешь что ставить вместо ххх, при деплое на хероку? Вы не используете аддон MongoHQ heroku? - person oma; 10.05.2010