Laravel + SQLite - works in php artisan tinker, but gives "unable to open db file" - FIXED
This is just a quick post, maybe it'll help someone who searches for this. I'll try and stuff a few keywords in the post so it'll come up if someone searches for this problem :)
I was writing a small app in Laravel, that used SQLite, in /database/database.sqlite. I rarely use SQLite - but this was a tiny app that needed to be moved around servers so it made perfect sense.
It worked fine locally. I transferred to another server, and the migration (php artisan migrate:fresh) worked (so the database was writable/was working). However when I used a browser to access to the app, it would give errors like General error: 14 unable to open database file (other errors given at bottom of this post).
I had the permissions set up correctly for this file. This wasn't a public facing service, and I was running out of ideas. I even tried
chmod 777 ./database/database.sqlite. I tried changing the owner of the .sqlite file. Nothing helped.
The fix was simple. As this comment points out:
If you receive an error while trying to write to a sqlite database (update, delete, drop):
Warning: PDO::query() [function.query]: SQLSTATE[HY000]: General error: 1 unable to open database
The folder that houses the database file must be writeable.
chown of the actual /database/ directory fixed my problems.
(Writes to the SQLite database were working fine in php artisan migrate or php artisan tinker because it was a different user than what the (apache) web server was using).
(Some other errors that might be because of this problem include: [PDOException] SQLSTATE[HY000]  unable to open database file, or SQLSTATE[HY000]General Error: 8 attempt to write a readonly database)