3

自从使用 Mongoid 维护与 mongodb 的连接以来,我遇到了一个奇怪的问题。我认为这最初是由于升级到 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) Web 应用程序完全没有响应(请求只是挂起) 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

我尝试过使用多个 Web 服务器(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 设置了连接),我没有任何问题。

4

0 回答 0