Mongodb 如何检查Mongoid的连接

Mongodb 如何检查Mongoid的连接,mongodb,connection,mongoid,database,Mongodb,Connection,Mongoid,Database,Mongoid是否有类似于ActiveRecord::Base.connected的方法?? 我想检查连接是否可访问。我的解决方案: def check_mongoid_connection mongoid_config = File.read("#{Rails.root}/config/mongoid.yml") config = YAML.load(mongoid_config)[Rails.env].symbolize_keys ho

Mongoid是否有类似于
ActiveRecord::Base.connected的方法?
? 我想检查连接是否可访问。

我的解决方案:

    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

我们希望为正在运行的Mongoid客户端实现一个运行状况检查,该检查告诉我们所建立的连接是否仍然有效。这就是我们得出的结论:

Mongoid.default_client.database_names.present?

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

snrlx的答案很好

我在puma配置文件中使用了以下内容,仅供参考:

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
需要提醒的一点是默认的
服务器选择\u超时
对于数据库状态检查来说太长了,至少在开发过程中,您可以在mongoid.yml中修改它