在我的Rails 2.3应用程序中,当数据库关闭时可能出现这种情况,但应用程序仍然可以正常工作。即我需要在数据库关闭时禁用部分应用程序。例如,有一些像is_database_up?
这样的方法,如果数据库启动,它将返回true。就目前而言,如果数据库崩溃,整个应用程序也会崩溃。有没有办法处理这种情况?
P.S。:我实际上是在问“放在is_database_up?
里面的内容”。即有没有办法捕获ActiveRecord异常并告诉ActiveRecord不要使用任何数据库?或者是否有任何方法可以通过任何ActiveRecord方法了解数据库在运行时期间是否已关闭。这样的事情。
答案 0 :(得分:0)
您可以使用ActiveRecord::Base.connected?
答案 1 :(得分:-1)
嗯,解决这个问题的最佳方法是确保应用程序数据库永远不会崩溃。也许你通过连接到另一个可以上下移动的数据库来做到这一点,这样如果主数据库发生故障,主服务器就会继续,然后主服务器返回后由主服务器更新/更新。然后,您将从主数据库的不稳定性中删除。这是一个更好的解决方案。
但是,要回答你的问题:
在每个请求开始时,您需要查看数据库是启动还是关闭,然后做出相应的反应。例如,如果他们尝试做一些需要db的东西,那么你需要将它们重新定向到其他地方。
我会在ApplicationController中使用before_filter执行此操作,类似于
before_filter :requires_database
...
protected
def requires_database
redirect_to root_path unless database_is_up?
end
然后,您可以忽略不需要数据库的页面中的过滤器(可能是网站的少数几个页面),(例如)
#in home_controller
skip_before_filter :requires_database
然后,如果数据库在请求中途中断,会出现问题。尝试和处理这是一个非常可怕的情况,我现在不打算这样做。如果可以,基本上避免这种可能性。