【问题标题】:OperationalError at / unable to open database file Appears SporadicallyOperationalError at / 无法打开数据库文件偶尔出现
【发布时间】:2017-09-21 15:24:10
【问题描述】:

当我尝试在生产环境中运行 Django 站点时出现以下错误:

OperationalError at / 无法打开数据库文件

最奇怪的部分是它适用于几次页面重新加载,甚至点击不同的导航链接。然后,它每隔一段时间左右就起作用。最后,它停止了一起工作。这种行为非常令人费解。

这是来自 settings.py 的相关部分

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

我已经在db.sqlite3 所在的目录中完成了chmod 777 db.sqlitechmod o+w .。它没有帮助。

我该如何解决这个问题?我正在使用带有 Linux 和 Apache 2.4 的基本 EC2 实例

编辑:

我刚刚使用cp project project1 复制了项目的整个目录,然后使用mv project1 project。这使该站点只需单击几下即可运行,但随后错误又开始蔓延。这可能是服务器问题吗?

【问题讨论】:

  • 你的 settings.py 中还有其他数据库设置吗?
  • 不,我没有。没有其他与 DB 相关的设置。
  • 请看编辑。
  • 如果使用完整路径作为名称,请确保服务器也可以写入父目录:stackoverflow.com/questions/7670289/…
  • “我已经在 db.sqlite3 所在的目录中完成了 chmod 777 db.sqlite 和 chmod o+w 。它没有帮助。”您对如何使父级可写有其他建议吗?

标签: python django apache sqlite permissions


【解决方案1】:

我通过在存储数据库文件的目录中运行以下两个命令来修复它:

sudo chown apache:www db.sqlite3

sudo chown apache:www .

这对我使用 Amazon Linux (CentOS) 的 AWS EC2 完成了

【讨论】:

    【解决方案2】:

    您将数据库的名称设置为完整路径。不要这样做。就说'NAME': 'db.sqlite3'

    【讨论】:

    • 我是这样设置的,否则会出现服务器错误。
    • 如果我按照你的建议设置,我会得到unable to open database file 如果我用完整路径设置,我会得到attempt to write a readonly database
    • 尝试为包含您的 db.sqlite3 的目录执行 chmod 777
    • 我的理解是,如果数据库位于项目的根目录中,那将非常不安全?
    • 我能够修复它。看我的回答。感谢您的帮助!
    猜你喜欢
    • 2012-05-21
    • 2011-11-10
    • 2013-05-02
    • 2012-06-08
    • 2011-12-01
    • 2016-06-17
    • 2011-06-05
    相关资源
    最近更新 更多