【问题标题】:DatabaseError: Unable to open db file, but only for Django adminDatabaseError:无法打开 db 文件,但仅适用于 Django 管理员
【发布时间】:2011-06-18 11:24:01
【问题描述】:

这可能是我使用 Django 4 年来遇到的最奇怪的问题。

我的网站在本地运行良好。在生产环境中它也运行良好,除了当我尝试访问管理站点时,我在 Apache 错误日志中收到一个服务器错误,即“OperationalError:无法打开数据库文件”。

数据库文件是全局可写的,设置中的路径是绝对的。生产环境为 Ubuntu Lucid / Python 2.6 / Sqlite3。我用 Django 1.2.4 和 1.3 beta 都试过了。

奇怪的是,我可以在服务器上syncdb。它创建表和管理员用户。我可以毫无问题地访问该网站。我可以运行 shell 并在 python 提示符下创建内容。该网站是可浏览的。只有当我访问管理员时,我才会收到此错误。

我没有任何推理的依据。任何帮助是极大的赞赏。

ps:该错误是在 Apache 级别引发的,而不是来自 Django。 Django 回溯位于 Apache 错误日志中,其内容为 DatabaseError: unable to open database file

【问题讨论】:

  • 您确定您的所有模型都与数据库中的版本相同吗?我曾经遇到过类似的问题,但一开始并没有意识到,因为我在正常页面上很少使用此模型。但是管理员会一次性打开所有这些。
  • 我没有发现模型有任何问题。无论如何,我都可以在本地访问管理站点。另外,如果是模型,我会得到一个不同的错误,而不是cannot open database file。所以我认为它一定是别的东西。谢谢。

标签: database django django-admin sqlite


【解决方案1】:

一个愚蠢的猜测。

哪个用户正在运行 apache?

我知道站点的其余部分正常工作很奇怪,但请仔细检查您的 sqlite 数据库是否可以从运行 Apache 的用户访问和读写!

【讨论】:

  • 好的,谢谢!我将整个目录树的所有者组更改为 www-data,即 apache,并且它有效。奇怪的是,我已经为 sqlite 数据库文件授予了 777 权限,但它没有用。谢谢。
  • 很高兴听到好消息。也许文件是 777,但路径中的一个(或多个)目录不允许 apache 用户访问该文件!
  • 我知道这是一个老问题,但为了完整性:python sqlite 模块需要对包含数据库文件的目录进行写访问。
【解决方案2】:
sudo chown www-data /var/www/yourproject/db.sqlite3

这样就可以解决问题(将用户设置为 Apache)

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 2012-06-04
    • 1970-01-01
    • 2018-08-29
    • 2020-02-18
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2015-03-03
    相关资源
    最近更新 更多