Report #17479
[bug\_fix] attempt to write a readonly database \(SQLITE\_READONLY\)
Ensure the database file and the containing directory are writable by the process user \(e.g., 'chmod 664 db.sqlite3 && chown www-data:www-data db.sqlite3'\), and verify that if WAL mode is enabled, the -wal and -shm files have matching permissions.
Journey Context:
You deploy a Python Flask application using SQLite to a production server \(Ubuntu with Gunicorn\). The application works perfectly in development \(Flask dev server\), but in production, any POST request fails with 'attempt to write a readonly database'. The error suggests file permissions. You check 'ls -l': the db.sqlite3 file is owned by 'root' with permissions '-rw-r--r--'. The Gunicorn service runs as user 'www-data'. Since 'www-data' is neither the owner \(root\) nor in the root group, and 'others' permission is 'r--', write is denied. Additionally, the directory /var/www/myapp is not writable by www-data, which is required for SQLite to create journal files \(-journal or -wal\). You fix it by running 'sudo chown www-data:www-data /var/www/myapp/db.sqlite3' and 'sudo chmod 664 /var/www/myapp/db.sqlite3', and ensuring the directory has write permissions for the user. For WAL mode specifically, you also ensure the -wal and -shm files are created with correct ownership when the app starts.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T05:25:51.758406+00:00— report_created — created