Internal error occurred but is skipped: FindTagsByCommitIDs

Files
VLoop/backend/cmd/main.go
2026-05-06 21:09:12 +08:00

99 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"context"
"feedsystem_video_go/internal/config"
"feedsystem_video_go/internal/db"
apphttp "feedsystem_video_go/internal/http"
rabbitmq "feedsystem_video_go/internal/middleware/rabbitmq"
rediscache "feedsystem_video_go/internal/middleware/redis"
"feedsystem_video_go/internal/observability"
"log"
"os"
"strconv"
"time"
"github.com/joho/godotenv"
)
func main() {
// 加载 .env本地开发
if err := godotenv.Load(); err != nil {
log.Println(".env not found; continuing")
}
// 加载配置
configPath := os.Getenv("CONFIG_PATH")
if configPath == "" {
configPath = "configs/config.yaml"
}
log.Printf("Loading config from %s", configPath)
cfg, usedDefault, err := config.LoadLocalDev(configPath)
if err != nil {
log.Fatalf("Failed to load config: %v", err)
}
if usedDefault {
log.Printf("Config File %s not found, using default local config", configPath)
} else {
log.Printf("Config loaded from file: %s", configPath)
}
// 连接数据库
//log.Printf("Database config: %v", cfg.Database)
sqlDB, err := db.NewDB(cfg.Database)
if err != nil {
log.Fatalf("Failed to connect database: %v", err)
}
if err := db.AutoMigrate(sqlDB); err != nil {
log.Fatalf("Failed to auto migrate database: %v", err)
}
defer db.CloseDB(sqlDB)
// 连接 Redis (可选,用于缓存)
cache, err := rediscache.NewFromEnv(&cfg.Redis)
if err != nil {
log.Printf("Redis config error (cache disabled): %v", err)
cache = nil
} else {
pingCtx, cancel := context.WithTimeout(context.Background(), 300*time.Millisecond)
defer cancel()
if err := cache.Ping(pingCtx); err != nil {
log.Printf("Redis not available (cache disabled): %v", err)
_ = cache.Close()
cache = nil
} else {
defer cache.Close()
log.Printf("Redis connected (cache enabled)")
}
}
// 连接 RabbitMQ (可选,用于消息队列)
rmq, err := rabbitmq.NewRabbitMQ(&cfg.RabbitMQ)
if err != nil {
log.Printf("RabbitMQ config error (disabled): %v", err)
rmq = nil
} else {
defer rmq.Close()
log.Printf("RabbitMQ connected")
}
// Pprof
pprofServer, err := observability.NewPprofServer(
"API",
cfg.ObservabilityConfig.Pprof.Enabled,
cfg.ObservabilityConfig.Pprof.ApiAddr,
)
if err != nil {
log.Printf("Failed to start API pprof server: %v", err)
}
if pprofServer != nil {
defer pprofServer.Close()
}
// 设置路由
r := apphttp.SetRouter(sqlDB, cache, rmq)
log.Printf("Server is running on port %d", cfg.Server.Port)
if err := r.Run(":" + strconv.Itoa(cfg.Server.Port)); err != nil {
log.Fatalf("Failed to run server: %v", err)
}
}