如何检查Mongoid的连接

时间:2015-02-11 03:47:27

标签: mongodb connection mongoid database

Mongoid有没有像ActiveRecord::Base.connected?这样的方法? 我想检查一下可以访问的连接。

3 个答案:

答案 0 :(得分:1)

我的解决方案:

    def check_mongoid_connection
        mongoid_config = File.read("#{Rails.root}/config/mongoid.yml")
        config = YAML.load(mongoid_config)[Rails.env].symbolize_keys
        host, db_name, user_name, password = config[:host], config[:database], config[:username], config[:password]
        port = config[:port] || Mongo::Connection::DEFAULT_PORT

        db_connection = Mongo::Connection.new(host, port).db(db_name)
        db_connection.authenticate(user_name, password) unless (user_name.nil? || password.nil?)
        db_connection.collection_names
        return { status: :ok }
    rescue Exception => e
        return { status: :error, data: { message: e.to_s } }
    end

答案 1 :(得分:1)

我们想要为我们正在运行的Mongoid客户端实现运行状况检查,该客户端告诉我们已建立的连接是否仍然存在。这就是我们想出的:

Mongoid.default_client.database_names.present?

基本上它会占用您当前的客户端并尝试查询其连接的服务器上的数据库。如果此服务器已关闭,您将遇到超时,您可以捕获。

答案 2 :(得分:0)

snrlx的答案很棒。

我在我的puma配置文件中使用以下内容,FYI:

before_fork do
  begin
    # load configuration
    Mongoid.load!(File.expand_path('../../mongoid.yml', __dir__), :development)

    fail('Default client db check failed, is db connective?') unless Mongoid.default_client.database_names.present?
  rescue => exception
    # raise runtime error
    fail("connect to database failed: #{exception.message}")
  end
end

要提醒的一件事是默认server_selection_timeout30 seconds,这对于至少在开发中的db状态检查来说太长了,你可以在你的mongoid.yml中修改它。