【发布时间】:2020-09-08 23:05:56
【问题描述】:
我想为一个 ruby 应用设置 MySQL 数据库健康检查,基本上响应应该是
{
"read_success": true,
"write_success": true,
"exception": null
}
我的健康检查应该执行以下操作:
从数据库中读取一个表 写一些东西到数据库 如果上述任何操作失败,它应该抛出响应中提到的异常。
module API
ApplicationName.controllers :health_check do
get :index do
status = {
read_success: read_successful,
write_success: write_successful,
exception: check_exception
}
[200, {}, [status.to_json]]
end
end
end
def read_successful
begin
ActiveRecord::Base.connection.execute("SELECT 1")
true
rescue
false
end
end
def write_successful
begin
# logic to check write to database, which table should i write to?
true
rescue
false
end
end
def check_exception
begin
ActiveRecord::Base.connection.execute("SELECT 1")
nil
rescue Exception => e
return e.message
end
begin
# logic to check write to database, which table should i write to?
nil
rescue Exception => e
return e.message
end
end
我已经尝试实现上述读取健康检查,但不知道如何实现写入健康检查?有没有什么方法可以实现写健康检查,而不需要在数据库中创建一个新的健康检查表。
实现写入健康检查的逻辑应该是什么?
【问题讨论】:
-
虽然很好,但是写健康检查是多余的。当您遇到数据库问题时,100 次中有 96 次是连接问题,因此读取运行状况检查绰绰有余。在最初出现写入问题(即磁盘已满)的极少数情况下,很快就会出现连接问题。
-
所以你的意思是说如果我能读数据库,我就一定能写?有什么理由支持这个说法?
-
如果你会阅读,你很有可能会写作。经验丰富。
-
好的明白了,但是你能帮我写一个写数据库健康检查吗?
-
从已知表中选择已知行或从已知表中选择计数。如果您得到正确的值,则检查通过。
标签: mysql ruby-on-rails ruby health-check