Skip to main content
 首页 » 编程设计

python之Django 管理后端 'Operational Error' 尝试写入只读数据库

2025年05月04日48jackei

这个问题似乎已经被问过很多次了,但我检查过的所有解决方案都没有为我工作。我在安装了 Django 1.6.1 的 Ubuntu 14.04 服务器上运行 nginx。我正在尝试为一个项目使用默认的 django 管理后端(通常在 localhost/admin/)。

我遇到的问题是OperationalError at/admin/attempt to write a readonly database

(当我更改 db.sqlite3 文件的 chmod 权限时更新错误现在显示为 OperationalError at/admin/unable to open database file 但我已经检查了 Django Newbie Mistakes 网站上的每个选项答案和没有骰子)

一些答案​​谈到了生成的数据库文件 db.sqlite3 的 r+w+x 权限,据我所知,即使是 db 文件上的 777 也没有'什么都不做,所以我将它保持在 656。

据我所知,django 项目工作正常(所有页面都呈现良好,/admin 页面呈现时没有 css。当我尝试使用 localhost/admin/登录并单击提交时,我得到了带有错误的 django 调试页面).它们都属于 root:root。我已尝试更改所有文件和目录的权限以归 www-data:www-data 但没有任何权限。

我什至尝试更改 settings.py 以拥有数据库的绝对路径而不是 os.path.join(BASE_DIR, 'db.sqlite3')

我认为这归结为所有权问题,但我会接受任何帮助。

请您参考如下方法:

经过所有的麻烦和 2 个多小时的撞墙,文件的答案......

我使用的是 gunicorn,我使用了 Digital Ocean 设置的曲奇切割器,它使用户成为 django。我认为千篇一律的方法将是一种快捷方式,易于修改并跳过无聊的部分。结果在 /etc/init/gunicorn.conf setuid 和 setgid 中被设置为用户 django。我没有阅读文档并认为这些意义不大是我的错。

如果您遇到此问题,请删除 setuid 或 setgid 或将它们设置为 www-data。