python sqlite3错误:尝试写入只读数据库

python sqlite3错误:尝试写入只读数据库,python,apache,sqlite,mod-wsgi,Python,Apache,Sqlite,Mod Wsgi,我正在尝试使用WSGI在CentOS Apache2上运行Flask REST服务。REST服务需要非常小的存储空间。所以我决定将SQLite与sqlite3python包一起使用。当使用app.run()运行时,整个应用程序在我的本地系统和CentOS服务器上运行良好。但是当我使用WSGI在Apache上托管应用程序时,我得到了 OperationalError: attempt to write a readonly database 我已经检查了该文件的权限。使用chown和chgrp将

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

OperationalError: attempt to write a readonly database
我已经检查了该文件的权限。使用
chown
chgrp
将文件的用户和组设置为apache(服务器在其下运行)。此外,该文件具有
rwx
权限。我仍然得到只读数据库错误。以下是在db文件上运行
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>

ServerName wlc.host.com
WSGIDaemonProcess wlcd
WSGIScriptAlias//var/www/html/wlcd.wsgi
重新启动发动机
RewriteCond%{HTTP:Authorization}^(.*)
重写规则。*-[e=HTTP\U授权:%1]
WSGIProcessGroup wlcd
WSGIApplicationGroup%{GLOBAL}
命令拒绝,允许
通融
要求所有授权

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

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文件的目录。(父容器)


在我的情况下工作。

您是否将目录的权限更改为
apache:apache
?我的flask应用程序的python包具有权限
drw-rw-r-->
(使用apache:apache)并且导入该目录的wsgi脚本也具有相同的权限。尝试添加
-r
chown-r apache:apache/path/到/your/directory/
是的,对。你能发布你的Apache配置吗?我在这里读到关于禁用SELinux的文章,我想我会尝试一下,所以我就这么做了。它确实有效。但不确定,还有什么事情会出错是的,对我来说,我从git克隆中获取了数据库,然后抛出了错误。删除它解决了PB777对整个项目目录的权限是个坏主意。不应该这样做。改做774。最后4项仅向第三方提供读取权限。不要在末尾加7。大不了。