diff --git a/README.md b/README.md index e44b920..fa65c04 100644 --- a/README.md +++ b/README.md @@ -175,6 +175,7 @@ You can specify configuration options either via a config file (default: `config | `db.charset` | `WAKAPI_DB_CHARSET` | `utf8mb4` | Database connection charset (for MySQL only) | | `db.max_conn` | `WAKAPI_DB_MAX_CONNECTIONS` | `2` | Maximum number of database connections | | `db.ssl` | `WAKAPI_DB_SSL` | `false` | Whether to use TLS encryption for database connection (Postgres and CockroachDB only) | +| `db.automgirate_fail_silently` | `WAKAPI_DB_AUTOMIGRATE_FAIL_SILENTLY` | `false` | Whether to ignore schema auto-migration failures when starting up | | `mail.enabled` | `WAKAPI_MAIL_ENABLED` | `true` | Whether to allow Wakapi to send e-mail (e.g. for password resets) | | `mail.provider` | `WAKAPI_MAIL_PROVIDER` | `smtp` | Implementation to use for sending mails (one of [`smtp`, `mailwhale`]) | | `mail.smtp.*` | `WAKAPI_MAIL_SMTP_*` | `-` | Various options to configure SMTP. See [default config](config.default.yaml) for details | @@ -182,7 +183,7 @@ You can specify configuration options either via a config file (default: `config | `sentry.dsn` | `WAKAPI_SENTRY_DSN` | – | DSN for to integrate [Sentry](https://sentry.io) for error logging and tracing (leave empty to disable) | | `sentry.enable_tracing` | `WAKAPI_SENTRY_TRACING` | `false` | Whether to enable Sentry request tracing | | `sentry.sample_rate` | `WAKAPI_SENTRY_SAMPLE_RATE` | `0.75` | Probability of tracing a request in Sentry | -| `sentry.sample_rate_heartbats` | `WAKAPI_SENTRY_SAMPLE_RATE_HEARTBEATS` | `0.1` | Probability of tracing a heartbeats request in Sentry | +| `sentry.sample_rate_heartbeats` | `WAKAPI_SENTRY_SAMPLE_RATE_HEARTBEATS` | `0.1` | Probability of tracing a heartbeats request in Sentry | ### Supported databases Wakapi uses [GORM](https://gorm.io) as an ORM. As a consequence, a set of different relational databases is supported. diff --git a/config.default.yml b/config.default.yml index b7b359c..36aae94 100644 --- a/config.default.yml +++ b/config.default.yml @@ -18,15 +18,16 @@ app: svelte: Svelte db: - host: # leave blank when using sqlite3 - port: # leave blank when using sqlite3 - user: # leave blank when using sqlite3 - password: # leave blank when using sqlite3 - name: wakapi_db.db # database name for mysql / postgres or file path for sqlite (e.g. /tmp/wakapi.db) - dialect: sqlite3 # mysql, postgres, sqlite3 - charset: utf8mb4 # only used for mysql connections - max_conn: 2 # maximum number of concurrent connections to maintain - ssl: false # whether to use tls for db connection (must be true for cockroachdb) (ignored for mysql and sqlite) + host: # leave blank when using sqlite3 + port: # leave blank when using sqlite3 + user: # leave blank when using sqlite3 + password: # leave blank when using sqlite3 + name: wakapi_db.db # database name for mysql / postgres or file path for sqlite (e.g. /tmp/wakapi.db) + dialect: sqlite3 # mysql, postgres, sqlite3 + charset: utf8mb4 # only used for mysql connections + max_conn: 2 # maximum number of concurrent connections to maintain + ssl: false # whether to use tls for db connection (must be true for cockroachdb) (ignored for mysql and sqlite) + automgirate_fail_silently: false # whether to ignore schema auto-migration failures when starting up security: password_salt: # CHANGE ! diff --git a/config/config.go b/config/config.go index 700883d..d7a0b5a 100644 --- a/config/config.go +++ b/config/config.go @@ -82,16 +82,17 @@ type securityConfig struct { } type dbConfig struct { - Host string `env:"WAKAPI_DB_HOST"` - Port uint `env:"WAKAPI_DB_PORT"` - User string `env:"WAKAPI_DB_USER"` - Password string `env:"WAKAPI_DB_PASSWORD"` - Name string `default:"wakapi_db.db" env:"WAKAPI_DB_NAME"` - Dialect string `yaml:"-"` - Charset string `default:"utf8mb4" env:"WAKAPI_DB_CHARSET"` - Type string `yaml:"dialect" default:"sqlite3" env:"WAKAPI_DB_TYPE"` - MaxConn uint `yaml:"max_conn" default:"2" env:"WAKAPI_DB_MAX_CONNECTIONS"` - Ssl bool `default:"false" env:"WAKAPI_DB_SSL"` + Host string `env:"WAKAPI_DB_HOST"` + Port uint `env:"WAKAPI_DB_PORT"` + User string `env:"WAKAPI_DB_USER"` + Password string `env:"WAKAPI_DB_PASSWORD"` + Name string `default:"wakapi_db.db" env:"WAKAPI_DB_NAME"` + Dialect string `yaml:"-"` + Charset string `default:"utf8mb4" env:"WAKAPI_DB_CHARSET"` + Type string `yaml:"dialect" default:"sqlite3" env:"WAKAPI_DB_TYPE"` + MaxConn uint `yaml:"max_conn" default:"2" env:"WAKAPI_DB_MAX_CONNECTIONS"` + Ssl bool `default:"false" env:"WAKAPI_DB_SSL"` + AutoMigrateFailSilently bool `yaml:"automigrate_fail_silently" default:"false" env:"WAKAPI_DB_AUTOMIGRATE_FAIL_SILENTLY"` } type serverConfig struct { @@ -176,25 +177,25 @@ func (c *Config) GetMigrationFunc(dbDialect string) models.MigrationFunc { switch dbDialect { default: return func(db *gorm.DB) error { - if err := db.AutoMigrate(&models.User{}); err != nil { + if err := db.AutoMigrate(&models.User{}); err != nil && !c.Db.AutoMigrateFailSilently { return err } - if err := db.AutoMigrate(&models.KeyStringValue{}); err != nil { + if err := db.AutoMigrate(&models.KeyStringValue{}); err != nil && !c.Db.AutoMigrateFailSilently { return err } - if err := db.AutoMigrate(&models.Alias{}); err != nil { + if err := db.AutoMigrate(&models.Alias{}); err != nil && !c.Db.AutoMigrateFailSilently { return err } - if err := db.AutoMigrate(&models.Heartbeat{}); err != nil { + if err := db.AutoMigrate(&models.Heartbeat{}); err != nil && !c.Db.AutoMigrateFailSilently { return err } - if err := db.AutoMigrate(&models.Summary{}); err != nil { + if err := db.AutoMigrate(&models.Summary{}); err != nil && !c.Db.AutoMigrateFailSilently { return err } - if err := db.AutoMigrate(&models.SummaryItem{}); err != nil { + if err := db.AutoMigrate(&models.SummaryItem{}); err != nil && !c.Db.AutoMigrateFailSilently { return err } - if err := db.AutoMigrate(&models.LanguageMapping{}); err != nil { + if err := db.AutoMigrate(&models.LanguageMapping{}); err != nil && !c.Db.AutoMigrateFailSilently { return err } return nil