【问题标题】:Django admin backend 'Operational Error' attempt to write a readonly databaseDjango 管理后端“操作错误”尝试写入只读数据库
【发布时间】:2014-12-04 05:32:41
【问题描述】:

这个问题似乎已经被问过很多次,但我检查过的所有解决方案都还没有为我工作。我在安装了 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 也没有做任何事情,所以我将其保留在 @987654327 @。

据我所知,django 项目工作正常(所有页面呈现正常,/admin 页面呈现没有 css。当我尝试使用 localhost/admin/ 登录并单击提交时,我得到 django 调试页面并显示错误)。它们都归root:root 所有。我尝试更改 www-data:www-data 拥有的每个文件和目录的权限,但没有。

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

我认为这是所有权问题,但我会寻求帮助。

【问题讨论】:

    标签: python django nginx sqlite gunicorn


    【解决方案1】:

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

    我使用的是 gunicorn,我从 Digital Ocean 中设置了一个 cookie 切割器,它使用户 django。我认为千篇一律的方法将是一种易于修改并跳过无聊位的捷径。原来/etc/init/gunicorn.confsetuidsetgid被设置为用户django。我的错是没有阅读文档并假设这些文档意义不大。

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

    【讨论】:

    【解决方案2】:

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

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

    sudo python3 manage.py runserver
    

    【讨论】:

      猜你喜欢
      • 2021-03-12
      • 2016-08-16
      • 2016-10-20
      • 2015-10-27
      • 2017-09-27
      • 1970-01-01
      • 2018-05-23
      • 2021-09-11
      • 2018-03-07
      相关资源
      最近更新 更多