J'essaie d'exécuter un service Flask REST sur CentOS Apache2 à l'aide de WSGI. Le service REST nécessite un très petit stockage) . J'ai donc décidé d'utiliser SQLite avec sqlite3
python. L'ensemble de l'application fonctionnait parfaitement sur mon système local et sur le serveur CentOS lorsqu'elle était exécutée à l'aide de app.run()
. Mais quand j'ai utilisé WSGI pour héberger l'application sur Apache, je reçois
OperationalError: attempt to write a readonly database
J'ai vérifié les autorisations du fichier. L'utilisateur et le groupe du fichier sont définis sur Apache (sous lequel le serveur fonctionne) à l'aide de chown
et chgrp
. En outre, le fichier dispose de l'autorisation rwx
. Je reçois toujours une erreur de base de données en lecture seule. Voici ce que j'obtiens en exécutant ls -al
Sur le fichier db:
-rwxrwxrwx. 1 Apache apache 8192 Nov 19 01:39 dbfile.db
Ma configuration 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>
En plus de modifier les autorisations du fichier de base de données, vous devez également modifier les autorisations pour le répertoire qui héberge le fichier de base de données. Vous pouvez essayer la commande suivante:
chmod 664 /path/to/your/directory/
Vous pouvez également changer le propriétaire du répertoire comme suit:
chown Apache:apache /path/to/your/directory/
Ce qui a fonctionné pour moi (je n'ai pas Sudo) a été de supprimer le fichier de base de données et toutes les migrations et de recommencer, comme décrit ici: Comment puis-je supprimer la base de données (sqlite3) dans Django = 1.9 pour repartir de zéro?