我有一个无服务器的数据库集群,它在不使用时会旋转。冷启动大约需要一分钟,在此期间django会等待并等待将HTTP请求对象发回。
在编写复杂代码之前,我正在寻找有关现有中间件/信号集成的建议,这些建议将允许我在django尝试获取数据库连接时呈现一个临时视图(例如,如果数据库查询花费的时间长于一秒钟完成,改为呈现到该视图。)
答案 0 :(得分:2)
您可以创建一个自定义中间件,该中间件将针对每个请求测试数据库连接。请记住,这将尝试在每个请求上创建一个新的数据库连接
from django.db import connection
from django.db.utils import OperationalError
from django.shortcuts import render_to_response
def db_is_up_middleware(get_response):
def middleware(request):
try:
c = connection.cursor()
except OperationalError:
return render_to_response('your_template.html')
else:
return get_response(request)
return middleware
答案 1 :(得分:0)
部分解决方案:
我将RESTful网关的查询超时减少到3秒。在超时结束时,我返回504错误,并显示一条不错的消息,告诉用户服务器已进入睡眠状态,但很快就会重新启动。在504错误的text / html响应中,我包含了一个刷新元标记,因此浏览器将自动尝试重新加载视图。
我从面向公众的站点上撤下了所有数据库调用,并将它们置于身份验证层后面。这意味着认证将是最有可能超时的步骤,并且用户(我希望)在收到上述504错误后自然会尝试重新认证。
我在document.ready()中添加了一个AJAX jQuery调用以提取随机数据库记录。该查询将超时,并且将不会发生任何事情(按预期方式)。每当用户点击面向公众的页面时,它将强制数据库服务器立即开始启动。