Say which path and user cannot open the database
sql.Open is lazy, so a permission problem surfaced from whichever query ran first: "create schema_migrations: unable to open database file (14)", which names neither the file nor the reason. Ping on open and report the path and the effective uid and gid instead. The cause in practice is a bind-mounted ./data that Docker created as root while the container runs as FOODSTER_UID. Documented in the README.
This commit is contained in:
@@ -128,6 +128,17 @@ func openDB(path string) (*sql.DB, error) {
|
||||
// sidesteps SQLITE_BUSY entirely. Raise it if reads ever contend.
|
||||
db.SetMaxOpenConns(1)
|
||||
|
||||
// sql.Open is lazy, so without this the first failure surfaces from
|
||||
// whatever query ran first and says nothing useful. The usual cause is a
|
||||
// bind-mounted directory owned by a different user than the container
|
||||
// runs as, so name the path and the uid.
|
||||
if err := db.Ping(); err != nil {
|
||||
db.Close()
|
||||
return nil, fmt.Errorf(
|
||||
"cannot open %s as uid %d gid %d: %w (is that directory writable by this user?)",
|
||||
path, os.Getuid(), os.Getgid(), err)
|
||||
}
|
||||
|
||||
if err := migrate(db); err != nil {
|
||||
db.Close()
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user