Mongoid有没有像ActiveRecord::Base.connected?
这样的方法?
我想检查一下可以访问的连接。
答案 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_timeout
是30 seconds,这对于至少在开发中的db状态检查来说太长了,你可以在你的mongoid.yml中修改它。