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.sqlite
和chmod 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:无法创建新的连接进程