python sqlite3 OperationalError: attempt to write a readonly database

python sqlite3 OperationalError: attempt to write a readonly database

我正在尝试 运行 使用 WSGI 在 CentOS Apache2 上的 Flask REST 服务。 REST 服务需要非常小的存储空间。所以我决定将 SQLite 与 sqlite3 python 包一起使用。当 运行 使用 app.run() 时,整个应用程序在我的本地系统和 CentOS 服务器上运行良好。但是当我使用 WSGI 在 Apache 上托管应用程序时,我得到

OperationalError: attempt to write a readonly database

我检查了文件的权限。使用chownchgrp 将文件的用户和组设置为apache(服务器为运行ning)。此外,该文件具有 rwx 权限。我仍然收到只读数据库错误。以下是我在 db 文件上通过 运行ning ls -al 获得的内容:

-rwxrwxrwx. 1 apache apache 8192 Nov 19 01:39 dbfile.db

我的 Apache 配置:

<VirtualHost *>
ServerName wlc.host.com

WSGIDaemonProcess wlcd
WSGIScriptAlias / /var/www/html/wlcd.wsgi
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
<Directory /var/www/html/>
    WSGIProcessGroup wlcd
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
    Require all granted
</Directory>

除了更改数据库文件权限外,您还需要更改托管数据库文件的目录的权限。您可以尝试以下命令:

chmod 664 /path/to/your/directory/

您还可以按如下方式更改目录的所有者:

chown apache:apache /path/to/your/directory/

对我有用(我没有 sudo)的是删除数据库文件和所有迁移并重新开始,如此处所述:

运行

sudo chmod 774 path-to-your-djangoproject-directory 

该目录应该是包含 manage.py 和 db.sqlite3 文件的目录。 (父容器)。

在我的案例中有效。