【问题标题】:Django database not always availableDjango 数据库并不总是可用
【发布时间】:2014-06-07 08:06:31
【问题描述】:

我在 settings.py 中指定了多个数据库。其中一个数据库是本地 Oracle 数据库,它仅在我工作的计算机上可用。因此,当我在无法访问此 Oracle 数据库的计算机上打开我的站点时,我会看到错误 A server error occurred. Please contact the administrator.

因此,当我在工作计算机上时,我的代码可以正常工作,但是当我从另一台无法访问本地 Oracle 数据库的计算机上在线使用我的页面时,我的代码就会失败。

我不想远程访问本地数据库。当我无权访问本地 Oracle 数据库时,我只想忽略该错误。

【问题讨论】:

  • 这没有意义。决定访问数据库的不是浏览器的位置,而是服务器:它是访问 Oracle 的服务器。这里发生了其他事情。
  • Daniel Roseman:可能是因为我没有安装 cx_Oracle 模块?

标签: django django-models django-settings django-database


【解决方案1】:

您可以在设置模块中使用local.py 文件,该文件对于您正在使用的环境是唯一的。给定一个设置模块,您可以将以下内容放入您的__init__.py

try:
    import .local
except ImportError:
    pass

然后在 Oracle 数据库可用的机器上,在本地设置文件中设置正确的设置,但不要将其签入您的版本控制系统(例如,将其放入 .gitignore)。

还要注意设置中的顺序,在导入本地设置后,如果要保留更改,则不应覆盖它们。您可以在文件中向下移动导入,或者只是将设置添加到现有的字典中。

【讨论】:

    【解决方案2】:

    您可以在settings.py 中使用if 语句,因为它只是一个Python 脚本。因此,您可以添加一个函数来检测您是否在工作,然后使用该函数来决定是否应将 at work-only 数据库添加到DATABASES 变量中。

    # in settings.py
    
    def at_work():
        'Determines whether the project runs at work'
    
    if at_work():
        DATABASES = {...}
    else:
        DATABASES = {...}
    

    当然,如果您的模型依赖于仅在工作中可用的数据库,您将需要添加一个模拟数据库以启用在其他地方使用模型,即使没有可用数据。

    【讨论】:

    • 谢谢!如何确定我是否在工作计算机旁?
    • 您可以设置一个环境变量,读取主机名,在您选择的位置为其创建一个特定的文件,......有很多可能性。任何依赖于系统的东西都可以。
    • 我觉得,通常这是通过创建多个设置文件来实现的,lincolnloop.com/django-best-practices/…
    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2019-04-25
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多