【问题标题】:Django Lightsail - attempt to write a readonly databaseDjango Lightsail - 尝试编写只读数据库
【发布时间】:2023-03-09 07:42:01
【问题描述】:

我正在尝试在 AWS Lightsail 上部署我的 Djago 应用程序。

当我尝试登录/注册时,我收到此错误:

尝试写入只读数据库

我已经在谷歌上搜索了很长一段时间的解决方案,并尝试设置不同的权限,甚至放弃所有可能存在巨大安全风险的权限,但它仍然不起作用。

谁能帮帮我。

【问题讨论】:

  • 似乎问题不是Django用来访问数据库的用户的权限,问题似乎是数据库本身处于只读状态。您可以使用另一个客户端在此数据库上执行更新或插入语句吗?
  • 抱歉,不太清楚你是什么意思使用另一个客户端执行更新/插入,但奇怪的是,当我启动开发服务器并通过 :8000 访问页面时,一切正常。当我将生产服务器与我的自定义域一起使用时,它不起作用。另外,我现在正在考虑使用 postgres,因为它看起来更适合生产。但我也不是很清楚,因为我是初学者,这是第一次真正的 django 部署,但这只是一个接一个的问题
  • 好吧,Django 会尝试在您的数据库中插入/更新内容,对吧?它是什么类型的数据库,您使用什么类型的工具(某些客户端程序,例如用于 SQL Server 的 SSMS,以及诸如 PHPMyAdmin 之类的 Web 客户端)对数据库进行管理?您可以使用该工具在 Django DB 中插入/更新任何内容吗?
  • 我使用的是默认的 db.sqlite3 并且没有使用任何客户端程序。例如,我可以使用 django shell 插入数据库,或者当我使用开发服务器时。由于它不适用于我的真实域,我认为它必须对域的权限做一些事情,这真的很令人困惑。初学者要管理的事情太多了。

标签: django amazon-web-services


【解决方案1】:

检查您的文件是否归 bitnami:bitnami 所有。 (我遇到了和你一样的问题,我也无法解决)

【讨论】:

  • 你能告诉我如何检查吗?我给了它完全的权限,但它就是行不通..
  • 所以基本上做一个 sudo chown bitnami:bitnami db.sqlite3 。此外,如果您遇到问题,请访问我来自 bitnami 社区的帖子 (community.bitnami.com/t/permissions-on-db-sqlite3/…)。我也一直在努力解决我的问题,您也可以参与讨论
  • 所以,看起来像一个“固定”这个 - 帮助将 db.sqlite 移动到项目本身的外部目录。在 settings.py 中,我只是将位置更改为 os.path.join(BASE_DIR, '..', 'db.sqlite3')。我认为这充满了安全漏洞,db 本身也保留在 777 上,但这太令人沮丧了,我不再关心了。现在我正在处理另一个问题,但至少 db 现在正在工作
  • 嘿,它有效,非常感谢!!!!我已经有这个问题一个月了,但现在终于解决了,谢谢你!!!!
  • 哈哈,我很高兴。如果其他人需要,我应该将此作为答案发布。还有其他一些东西对我有帮助。好吧,我做了一些更改,所以不确定这是否是关键,但是在 apache2 主 conf 文件中,提到了一般用户(守护进程),我将这个更改为我的用户,这使我可以实际更改权限规则DB 所以它应该更安全。老实说,在我必须经历所有这些更改之后,我的部署可能非常不稳定,但在这一点上,我对让应用程序最终上线感到满意。我想也是时候研究一下 linux 了。
【解决方案2】:

所以,万一其他人有这个问题,什么应该有效,什么对我有效:

我将 db.sqlite3 文件移动到主项目目录之外的一个文件夹中

然后我将settings.py中这个文件的地址改为os.path.join(BASE_DIR, '..', 'db.sqlite3')

虽然我觉得确实是用户权限的问题,但这超出了我目前的水平。

【讨论】:

    【解决方案3】:

    我找到了另一个适合我的解决方案。

    见:https://github.com/mchesler613/django_adventures/blob/main/deploy_django_aws_bitnami.md

    作者详细介绍了错误背后的细节。 请参阅“错误:尝试写入只读数据库”


    将项目根目录和数据库文件的组所有权更改为守护进程。例如:

    $ sudo chgrp daemon project_directory project_directory/database_file

    使项目根目录和数据库文件可由守护程序组写入。例如:

    $ sudo chmod g+w project_directory project_directory/database_file

    要查看数据库错误是否消失,请尝试在浏览器上重新加载 Django 应用。

    【讨论】:

      猜你喜欢
      • 2014-12-07
      • 2021-03-12
      • 2021-11-07
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 2014-01-30
      相关资源
      最近更新 更多