Django管理员后端“操作错误”尝试编写只读数据库

时间:2014-10-09 10:15:00

标签: python django nginx sqlite gunicorn

这个问题似乎已被多次询问,但我检查过的所有解决方案还没有为我工作。我在安装了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以获得db的绝对路径,而不是os.path.join(BASE_DIR, 'db.sqlite3')

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

2 个答案:

答案 0 :(得分:6)

在经历了所有麻烦和2个多小时的撞击墙壁之后,档案的答案......

我正在使用gunicorn,我从Digital Ocean设置了一个cookie切割器,使用户django。我认为cookie切割器方法将是一个易于修改的快捷方式,并且跳过了无聊的位。结果是/etc/init/gunicorn.conf setuidsetgid设置为用户django。我没有阅读文档并假设这些意义不大,这是我的错。

如果您遇到此问题,请删除setuidsetgid或将其设置为www-data

答案 1 :(得分:0)

这个错误通常是由以不同的用户身份运行服务器引起的(我猜你正在运行一台 linux 机器)。如果您以root/管理员身份创建项目并以较低状态的用户身份运行服务器,那么您将收到错误。

尝试使用 sudo 权限运行服务器,即

sudo python3 manage.py runserver