Python Django中的测试数据库可访问性
我的问题和我的问题很相似 我刚刚开始学习Django,我发现自己随时都在尝试学习它的工作原理,只要我有空闲时间和笔记本电脑可用。我发现Heroku是一个测试东西的好地方,但是如果我在等着接孩子或者类似的事情,我就不能总是上网。在开发中,我想创建一个测试来检查数据库是否可以访问。如果没有,则故障转移到SQLite DB 我从大量借用的代码开始: 我只是在设置DATABASES变量后立即弹出该代码。但这也有一些弱点。最引人注目的是AWS(Heroku使用的)不响应ping,除非您专门启用它们。老实说,如果你没有必要,为什么要让事情变得不那么安全呢 因此,为了不重新发明轮子,这让我提出了一个问题:有人创造了一种方法来检查Django DB是否可以访问吗 我真的只需要检查博士后。但我真的很想找到一个通用的解决方案,所以如果你能给我指出一个只适用于博士后的解决方案,那就给我一半的学分Python Django中的测试数据库可访问性,python,django,postgresql,Python,Django,Postgresql,我的问题和我的问题很相似 我刚刚开始学习Django,我发现自己随时都在尝试学习它的工作原理,只要我有空闲时间和笔记本电脑可用。我发现Heroku是一个测试东西的好地方,但是如果我在等着接孩子或者类似的事情,我就不能总是上网。在开发中,我想创建一个测试来检查数据库是否可以访问。如果没有,则故障转移到SQLite DB 我从大量借用的代码开始: 我只是在设置DATABASES变量后立即弹出该代码。但这也有一些弱点。最引人注目的是AWS(Heroku使用的)不响应ping,除非您专门启用它们。老实说
编辑:为了澄清,互联网本身可能是可用的,但必要的端口可能会被防火墙阻止。很难知道什么是可用的这并不是在Heroku和本地开发人员机器之间管理数据库设置的真正方法 Heroku通过环境变量管理所有这些设置,这是。他们还制作了一个Django库,用于读取这些环境变量并自动适当地配置设置
您应该将其用于数据库设置,然后可以使用本地sqlite3数据库的地址设置本地env var
database\u URL
。然后,您的应用程序将自动在开发和生产环境中运行,并将自身配置为自动指向相关数据库。OPs的问题是如何让它根据可用性自动检测要连接到的数据库。你的答案是他应该忘记这一点并使用env变量手动配置吗?我不相信这实际上解决了我关于基于可用性选择的问题。我想Daniel的答案是正确的。自动故障切换的想法很好,但是当启动线程时,pingable()
只会被调用一次。如果您想在每次设置与数据库的连接时都运行此函数,则运行速度会非常慢。@Bjorn:这真的不是问题,因为这是我们讨论的仅用于开发的环境。稍微慢一点的问题比花一分钟编辑设置要小得多,因为你可能只有一分钟的时间。
def pingable(hostname):
try:
return os.system("ping -c 1 " + hostname + " > /dev/null 2>&1") == 0
except:
return False
if (not pingable(DATABASES['default']['HOST'])):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}