我有mysql数据库作为django的引擎。 Django通过fastcgi认为nginx在1分钟内超时(之后nginx说“504网关超时”)。
如果数据库出现故障,django正在尝试重新连接到DB并等待来自它的响应。等待响应时间太长(超过1分钟),nginx返回客户端504错误代码。
如何在django中设置db connecton的超时时间?以及正确的方式处理此事件并返回客户端一个漂亮的页面“抱歉数据库现在停止服务。请稍后再试”而不是技术504错误页面?
答案 0 :(得分:16)
您可以使用DATABASES
设置的OPTIONS词典。
选项名称取决于您的数据库后端,但对于PostgreSQL,它将是connect_timeout:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
…
'OPTIONS': {
'connect_timeout': 5,
}
}
}
答案 1 :(得分:5)
DATABASE_OPTIONS
中的 settings.py
是额外关键字args的字典,传递给正在使用的数据库模块的connect
方法;根据{{1}}上的connect
个文档,connect_timeout
值,正如另一个答案所说的那样,确实是你想要的(之前我曾经错过了,并且它因后端而异 - 例如,如果您的后端是SQLite,则拼写为timeout
。
对于自定义错误页面,您可以按照MySqlDB中关于编写自己的异常中间件的建议(我确定简单的异常中间件,只显示自定义页面可以在贡献的软件中找到,但它可能滚动自己比在网上搜索现有代码更快,你可能不得不调整代码; - )。