Mongoid 4 / MongoDB 2.4+ "Замораживание" выпуск

С тех пор у меня возникла странная проблема с поддержанием соединения с mongodb с использованием Mongoid. Я думал, что это было первоначально из-за обновления до Rails 4.0+ (что требовало обновления Mongoid/Moped), но у меня также была эта проблема с другими приложениями на основе Rack (Sinatra и Grape, если быть точным).

Мы обновили наш экземпляр mongodb с 2.4 до 2.6 после выпуска стабильной версии, но эта проблема присутствовала и на 2.4.

Я написал об этом в выпуске на Github ( https://github.com/mongoid/moped/issues/274), но я скопирую его здесь, так как я не получаю там никакой тяги.

Версия TL;DR состоит в том, что мои приложения случайно зависают при попытке выполнить запрос с использованием Mongoid. Это происходит независимо от того, использую ли я консоль Rails или приложение запущено (или развернуто). Если я в консоли, нажимаю CTRL+C, то повторная попытка запроса всегда работает, поэтому я подозреваю, что это какая-то проблема с подключением.

Мой конфиг mongoid похож на следующее:

mongoid.yml

default: &default
  sessions:
    default:      
      uri: "mongodb://localhost:27017/database"
      options:
        timeout: 15
        retry_interval: 1
        max_retries: 5
        pool_size: 10

development:
  <<: *default

Когда я изменяю сведения о соединении, ссылаясь на "удаленный" экземпляр mongodb, у меня периодически возникают проблемы с соединением.

mongoid.yml

default: &default
  sessions:
    default:      
      uri: "mongodb://remote-mongodb-url:27017/database"
      options:
        timeout: 15
        retry_interval: 1
        max_retries: 5
        pool_size: 10

development:
  <<: *default

Проблема проявляется следующим образом:

1) Веб-приложение перестает отвечать на запросы (запрос просто зависает) 2) Журнал Rails не показывает ничего необычного (даже если для уровней журнала Moped и Mongoid установлено значение DEBUG)

например:

Started GET "/accounts" for 172.16.3.180 at 2014-04-23 09:11:34 -0400
Processing by AccountsController#index as HTML

Я пытался использовать несколько веб-серверов (Webrick, Puma, Unicorn), и все они сталкиваются с той же проблемой.

3) Если я принудительно завершу работу сервера приложений (CTRL+C), я увижу следующее:

Started GET "/accounts" for 172.16.3.180 at 2014-04-23 09:11:34 -0400
Processing by AccountsController#index as HTML
^C[2014-04-23 09:12:52] INFO  going to shutdown ...
^CExiting
D, [2014-04-23T09:12:53.516499 #4673] DEBUG -- :   MOPED: 168.62.164.129:27017 COMMAND      database=admin command={:ismaster=>1} runtime: 78545.7536ms
Completed 401 Unauthorized in 78638ms
/home/alex/.rvm/gems/ruby-2.1.1/gems/rack-1.5.2/lib/rack/handler/webrick.rb:25:in `shutdown': undefined method `shutdown' for nil:NilClass (NoMethodError)

Странная вещь здесь, если я разверну приложение в производство (которое находится на том же сервере, что и mongodb, и имеет mongoid.yml настройка соединения для localhost:27017), у меня нет проблем.

0 ответов

Другие вопросы по тегам