OperationalError at / 无法打开数据库文件偶尔出现

Posted

技术标签:

【中文标题】OperationalError at / 无法打开数据库文件偶尔出现【英文标题】:OperationalError at / unable to open database file Appears Sporadically 【发布时间】: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 相关的设置。 请看编辑。 如果使用完整路径作为名称,请确保服务器也可以写入父目录:***.com/questions/7670289/… “我已经在 db.sqlite3 所在的目录中完成了 chmod 777 db.sqlite 和 chmod o+w 。它没有帮助。”您对如何使父级可写有其他建议吗? 【参考方案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 我的理解是,如果数据库位于项目的根目录中,那将非常不安全? 我能够修复它。看我的回答。感谢您的帮助!

以上是关于OperationalError at / 无法打开数据库文件偶尔出现的主要内容,如果未能解决你的问题,请参考以下文章

无法在 App Engine 上捕获 MySQLdb.OperationalError

OperationalError:(2003,“无法连接到'localhost'上的MySQL服务器([Errno 111]连接被拒绝)”)[关闭]

OperationalError:无法通过套接字连接到本地 MySQL 服务器

Django OperationalError:无法创建新的连接进程

django.db.utils.OperationalError:无法连接到服务器:没有这样的文件或目录

odoo 12 psycopg2.OperationalError:无法将主机名“db”转换为地址