增加mysql配置
This commit is contained in:
+8
-8
@@ -22,12 +22,14 @@ type Config struct {
|
|||||||
// DatabaseConfig holds database-specific configuration.
|
// DatabaseConfig holds database-specific configuration.
|
||||||
type DatabaseConfig struct {
|
type DatabaseConfig struct {
|
||||||
Type string `yaml:"type"` // "sqlite" (default) or "mysql"
|
Type string `yaml:"type"` // "sqlite" (default) or "mysql"
|
||||||
DSN string `yaml:"dsn"` // MySQL connection string (ignored for sqlite)
|
DSN string `yaml:"dsn"` // MySQL connection string (required when type is "mysql")
|
||||||
}
|
}
|
||||||
|
|
||||||
// defaultPort is the fallback web server port.
|
|
||||||
const defaultPort = "8080"
|
const defaultPort = "8080"
|
||||||
|
|
||||||
|
// mysqlExampleDSN is written into new config files as a reference.
|
||||||
|
const mysqlExampleDSN = "user:password@tcp(127.0.0.1:3306)/blog_go?charset=utf8mb4&parseTime=True&loc=Local"
|
||||||
|
|
||||||
// getConfigPath returns the OS-aware config directory and config file path.
|
// getConfigPath returns the OS-aware config directory and config file path.
|
||||||
func getConfigPath() (dir, file string) {
|
func getConfigPath() (dir, file string) {
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
@@ -49,7 +51,6 @@ func getDefaultStoragePath() string {
|
|||||||
|
|
||||||
// generateSecret returns a random-ish hex string for the session secret.
|
// generateSecret returns a random-ish hex string for the session secret.
|
||||||
func generateSecret() string {
|
func generateSecret() string {
|
||||||
// Use a combination of hostname + random to produce a unique secret.
|
|
||||||
hostname, _ := os.Hostname()
|
hostname, _ := os.Hostname()
|
||||||
input := fmt.Sprintf("%s-%d", hostname, os.Getpid())
|
input := fmt.Sprintf("%s-%d", hostname, os.Getpid())
|
||||||
hash := sha256.Sum256([]byte(input))
|
hash := sha256.Sum256([]byte(input))
|
||||||
@@ -61,8 +62,6 @@ func LoadConfig() *Config {
|
|||||||
configDir, configFile := getConfigPath()
|
configDir, configFile := getConfigPath()
|
||||||
defaultPath := getDefaultStoragePath()
|
defaultPath := getDefaultStoragePath()
|
||||||
|
|
||||||
cfg := &Config{}
|
|
||||||
|
|
||||||
// Check if config file exists; create with defaults if not.
|
// Check if config file exists; create with defaults if not.
|
||||||
if _, err := os.Stat(configFile); os.IsNotExist(err) {
|
if _, err := os.Stat(configFile); os.IsNotExist(err) {
|
||||||
log.Printf("Config file not found at %s, creating with defaults...", configFile)
|
log.Printf("Config file not found at %s, creating with defaults...", configFile)
|
||||||
@@ -70,10 +69,10 @@ func LoadConfig() *Config {
|
|||||||
log.Fatalf("Failed to create config directory %s: %v", configDir, err)
|
log.Fatalf("Failed to create config directory %s: %v", configDir, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg = &Config{
|
cfg := &Config{
|
||||||
Database: DatabaseConfig{
|
Database: DatabaseConfig{
|
||||||
Type: "sqlite",
|
Type: "sqlite",
|
||||||
DSN: "",
|
DSN: mysqlExampleDSN,
|
||||||
},
|
},
|
||||||
Port: defaultPort,
|
Port: defaultPort,
|
||||||
Path: defaultPath,
|
Path: defaultPath,
|
||||||
@@ -96,12 +95,13 @@ func LoadConfig() *Config {
|
|||||||
data, err := os.ReadFile(configFile)
|
data, err := os.ReadFile(configFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Warning: could not read config file %s: %v, using defaults", configFile, err)
|
log.Printf("Warning: could not read config file %s: %v, using defaults", configFile, err)
|
||||||
|
cfg := &Config{}
|
||||||
return applyDefaults(cfg, defaultPath)
|
return applyDefaults(cfg, defaultPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cfg := &Config{}
|
||||||
if err := yaml.Unmarshal(data, cfg); err != nil {
|
if err := yaml.Unmarshal(data, cfg); err != nil {
|
||||||
log.Printf("Warning: malformed config file %s: %v, using defaults", configFile, err)
|
log.Printf("Warning: malformed config file %s: %v, using defaults", configFile, err)
|
||||||
cfg = &Config{}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return applyDefaults(cfg, defaultPath)
|
return applyDefaults(cfg, defaultPath)
|
||||||
|
|||||||
+3
-4
@@ -28,11 +28,10 @@ func InitDB(cfg *config.Config) *gorm.DB {
|
|||||||
|
|
||||||
switch cfg.Database.Type {
|
switch cfg.Database.Type {
|
||||||
case "mysql":
|
case "mysql":
|
||||||
dsn := cfg.Database.DSN
|
if cfg.Database.DSN == "" {
|
||||||
if dsn == "" {
|
log.Fatalf("Database DSN is required when type is 'mysql'. Please set it in your config file.")
|
||||||
dsn = "root:password@tcp(127.0.0.1:3306)/blog_go?charset=utf8mb4&parseTime=True&loc=Local"
|
|
||||||
}
|
}
|
||||||
dialector = mysql.Open(dsn)
|
dialector = mysql.Open(cfg.Database.DSN)
|
||||||
default:
|
default:
|
||||||
dbPath := filepath.Join(cfg.Path, "blog.db")
|
dbPath := filepath.Join(cfg.Path, "blog.db")
|
||||||
dialector = sqlite.Open(dbPath)
|
dialector = sqlite.Open(dbPath)
|
||||||
|
|||||||
Reference in New Issue
Block a user