首页 > 解决方案 > DatabaseError:无法在 django 上打开数据库文件

问题描述

我有一个在 apache2 服务器上运行并使用sqlite数据库的Django 1.5应用程序。

数据库设置如下

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.sqlite3',
       'NAME': '/var/www/html/project/devdb',
       'USER': '',
       'PASSWORD': '',
       'HOST': '',
       'PORT': '',
   }
}

其中devdb是生成的数据库文件。

当我从终端控制台运行迁移命令时,它工作正常并且数据被迁移到数据库。

但是当我访问应用程序 URL 时,它给出了错误

DatabaseError at /url_path/
attempt to write a readonly database

然后我使用更改文件的权限

sudo chown 777 devdb

然后它开始给出错误

DatabaseError at /url_path/
unable to open database file

ls -ladevdb文件提供以下输出

-rwxr-xr-x  1 ubuntu ubuntu   1036 May 11  2018 manage.py
-rw-rw-r--  1 ubuntu ubuntu 291840 May 28 09:31 devdb

获取user运行的 apache2

ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'

www-data

但是将文件的所有者www-data再次更改为无法打开数据库文件

标签: djangodjango-database

解决方案


sqlite db 需要由 www-data 拥有,它所在的目录也是如此。

所以如果你的应用在/var/www/app

cd /var/www
chown www-data:www-data app
cd app
chown ww-data:www-data devdb

推荐阅读