我目前正在使用MongoDB来跟踪Rails 2应用中的各种内容。我使用以下代码来查看MongoDB是否已启动并正在运行,并根据状态显示链接或“脱机”消息。
这仅适用于管理员,因此它不是关键任务,因为应用程序将在没有MongoDB的情况下继续运行,但我确实希望在菜单未运行时禁用菜单中的链接。但是,我不喜欢下面代码的开销(运行时间不长,但希望有更简洁,更快捷的方式):
def verify_mongodb_status
begin
track = Track.first
@mongodb_running = true
rescue
@mongodb_running = false
logger.debug("***MongoDB not running.***")
notify_admin_about_errors("***MongoDB is not running***)
end
end
编辑:我忘了提到我已经为此做了一个before_filter;该方法位于application_controller.rb。
答案 0 :(得分:0)
我决定选择action_caching,因为这似乎不是一个好方法。结果是从120毫秒到大约16-25毫秒的速度增加很快:
def verify_mongodb_status
begin
track = Track.first
@mongodb_running = true
rescue => e
@mongodb_running = false
logger.debug("***MONGODB OFFLINE***: #{e}")
notify_admin_about_errors("MongoDB", "MongoDB error:\n#{e}", nil)
expire_action :action => :verify_mongodb_status
return
end
end
我现在正在添加逻辑,以免在MongoDB离线时被电子邮件轰炸(1就足够了)。