Skip to content

Commit 9c17ab4

Browse files
author
Serge Pauli
committed
fix: print actionable startup errors to stderr; document non-default pg port mapping
1 parent 3bb28bf commit 9c17ab4

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ docker run -d --name yrestapi-pg \
5454
-p 5432:5432 \
5555
postgres:16-alpine
5656

57+
# If local port 5432 is busy, use:
58+
# -p 5433:5432
59+
# and set POSTGRES_DSN host port to 5433 in .env.
60+
5761
# 2) Wait until DB is ready
5862
until docker exec yrestapi-pg pg_isready -U postgres -d app >/dev/null 2>&1; do sleep 1; done
5963

cmd/main.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,38 @@ import (
1414
"os"
1515
)
1616

17+
func startupFatal(code string, err error) {
18+
msg := err.Error()
19+
if err == nil {
20+
msg = "unknown error"
21+
}
22+
fmt.Fprintf(os.Stderr, "startup failed (%s): %s\n", code, msg)
23+
fmt.Fprintf(os.Stderr, "see log/app.log for details\n")
24+
os.Exit(1)
25+
}
26+
1727
func main() {
1828
debugFlag := flag.Bool("d", false, "enable debug logging")
1929
flag.Parse()
2030

2131
cfg := config.LoadConfig()
2232
if err := logger.Init("."); err != nil {
23-
fmt.Fprintf(os.Stderr, "log init failed: %v\n", err)
24-
os.Exit(1)
33+
startupFatal("log_init_failed", err)
2534
}
2635
logger.SetDebug(*debugFlag)
2736

2837
// PostgreSQL
2938

3039
if err := db.InitPostgres(cfg.PostgresDSN); err != nil {
3140
logger.Error("postgres_init_failed", map[string]any{"error": err.Error()})
32-
os.Exit(1)
41+
startupFatal("postgres_init_failed", err)
3342
}
3443
logger.Info("postgres_connected", nil)
3544

3645
// Initialize registry
3746
if err := model.InitRegistry(cfg.ModelsDir); err != nil {
3847
logger.Error("registry_init_failed", map[string]any{"error": err.Error()})
39-
os.Exit(1)
48+
startupFatal("registry_init_failed", err)
4049
}
4150
model.SetAliasCacheMaxBytes(cfg.AliasCache.MaxBytes)
4251
logger.Info("models_initialized", nil)
@@ -52,13 +61,13 @@ func main() {
5261
// Initialize routes
5362
if err := router.InitRoutes(cfg); err != nil {
5463
logger.Error("router_init_failed", map[string]any{"error": err.Error()})
55-
os.Exit(1)
64+
startupFatal("router_init_failed", err)
5665
}
5766
// Start HTTP server
5867
logger.Info("server_start", map[string]any{"port": cfg.Port})
5968
log.Printf("🚀 Starting server on port %s", cfg.Port)
6069
if err := http.ListenAndServe(":"+cfg.Port, nil); err != nil {
6170
logger.Error("server_error", map[string]any{"error": err.Error()})
62-
os.Exit(1)
71+
startupFatal("server_error", err)
6372
}
6473
}

0 commit comments

Comments
 (0)