diff --git a/.env.example b/.env.example index 679ef61..df0b154 100644 --- a/.env.example +++ b/.env.example @@ -27,7 +27,7 @@ DB_CONNECTION=sqlite # DB_USERNAME=root # DB_PASSWORD= -SESSION_DRIVER=database +SESSION_DRIVER=file SESSION_LIFETIME=120 SESSION_ENCRYPT=false SESSION_PATH=/ @@ -37,7 +37,7 @@ BROADCAST_CONNECTION=reverb FILESYSTEM_DISK=local QUEUE_CONNECTION=database -CACHE_STORE=database +CACHE_STORE=file # CACHE_PREFIX= MEMCACHED_HOST=127.0.0.1 diff --git a/config/database.php b/config/database.php index c90b026..55069fb 100644 --- a/config/database.php +++ b/config/database.php @@ -38,7 +38,8 @@ return [ 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), - 'busy_timeout' => 5000, + // Wait longer under concurrent writers (queue + web on one SQLite file). + 'busy_timeout' => (int) env('DB_BUSY_TIMEOUT', 30000), 'journal_mode' => 'WAL', 'synchronous' => 'NORMAL', 'transaction_mode' => 'DEFERRED', diff --git a/docker-compose.yml b/docker-compose.yml index c13139e..6010828 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,9 +14,11 @@ x-app-env: &app-env LOG_CHANNEL: stderr DB_CONNECTION: sqlite DB_DATABASE: /app/database/database.sqlite - SESSION_DRIVER: database + # File drivers avoid SQLite lock storms: Livewire polls + database queue + + # session/cache all writing the same sqlite file caused "database is locked". + SESSION_DRIVER: file QUEUE_CONNECTION: database - CACHE_STORE: database + CACHE_STORE: file BROADCAST_CONNECTION: reverb FILESYSTEM_DISK: local REVERB_APP_ID: ${REVERB_APP_ID:-andytranscribe}