mirror of
https://github.com/status-im/fathom.git
synced 2025-03-01 03:20:27 +00:00
Add support for FATHOM_DATABASE_URL
This commit is contained in:
parent
773a65ff94
commit
98970057a2
@ -4,6 +4,7 @@ import (
|
|||||||
"math/rand"
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"net/url"
|
||||||
|
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
"github.com/kelseyhightower/envconfig"
|
"github.com/kelseyhightower/envconfig"
|
||||||
@ -52,6 +53,14 @@ func Parse() *Config {
|
|||||||
log.Fatalf("Error parsing configuration from environment: %s", err)
|
log.Fatalf("Error parsing configuration from environment: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cfg.Database.URL != "" {
|
||||||
|
u, err := url.Parse(cfg.Database.URL)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Error parsing DATABASE_URL from environment: %s", err)
|
||||||
|
}
|
||||||
|
cfg.Database.Driver = u.Scheme
|
||||||
|
}
|
||||||
|
|
||||||
// alias sqlite to sqlite3
|
// alias sqlite to sqlite3
|
||||||
if cfg.Database.Driver == "sqlite" {
|
if cfg.Database.Driver == "sqlite" {
|
||||||
cfg.Database.Driver = "sqlite3"
|
cfg.Database.Driver = "sqlite3"
|
||||||
|
@ -49,6 +49,23 @@ func TestParse(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDatabaseURL(t *testing.T) {
|
||||||
|
data := []byte("FATHOM_DATABASE_URL=\"postgres://dbuser:dbsecret@dbhost:1234/dbname\"")
|
||||||
|
ioutil.WriteFile("env_values", data, 0644)
|
||||||
|
defer os.Remove("env_values")
|
||||||
|
|
||||||
|
LoadEnv("env_values")
|
||||||
|
cfg := Parse()
|
||||||
|
driver := "postgres"
|
||||||
|
url := "postgres://dbuser:dbsecret@dbhost:1234/dbname"
|
||||||
|
if cfg.Database.Driver != driver {
|
||||||
|
t.Errorf("Expected %#v, got %#v", driver, cfg.Database.Driver)
|
||||||
|
}
|
||||||
|
if cfg.Database.URL != url {
|
||||||
|
t.Errorf("Expected %#v, got %#v", url, cfg.Database.URL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestRandomString(t *testing.T) {
|
func TestRandomString(t *testing.T) {
|
||||||
r1 := randomString(10)
|
r1 := randomString(10)
|
||||||
r2 := randomString(10)
|
r2 := randomString(10)
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
|
URL string `default:""`
|
||||||
Driver string `default:"sqlite3"`
|
Driver string `default:"sqlite3"`
|
||||||
Host string `default:""`
|
Host string `default:""`
|
||||||
User string `default:""`
|
User string `default:""`
|
||||||
@ -19,6 +20,9 @@ func (c *Config) DSN() string {
|
|||||||
|
|
||||||
switch c.Driver {
|
switch c.Driver {
|
||||||
case "postgres":
|
case "postgres":
|
||||||
|
if c.URL != "" {
|
||||||
|
dsn = c.URL
|
||||||
|
} else {
|
||||||
params := map[string]string{
|
params := map[string]string{
|
||||||
"host": c.Host,
|
"host": c.Host,
|
||||||
"dbname": c.Name,
|
"dbname": c.Name,
|
||||||
@ -34,8 +38,8 @@ func (c *Config) DSN() string {
|
|||||||
|
|
||||||
dsn = dsn + k + "=" + v + " "
|
dsn = dsn + k + "=" + v + " "
|
||||||
}
|
}
|
||||||
|
|
||||||
dsn = strings.TrimSpace(dsn)
|
dsn = strings.TrimSpace(dsn)
|
||||||
|
}
|
||||||
case "mysql":
|
case "mysql":
|
||||||
mc := mysql.NewConfig()
|
mc := mysql.NewConfig()
|
||||||
mc.User = c.User
|
mc.User = c.User
|
||||||
|
@ -30,7 +30,7 @@ func New(c *Config) *sqlstore {
|
|||||||
db := &sqlstore{dbx, c}
|
db := &sqlstore{dbx, c}
|
||||||
|
|
||||||
// write log statement
|
// write log statement
|
||||||
log.Printf("Connected to %s database: %s", c.Driver, c.Name)
|
log.Printf("Connected to %s database: %s", c.Driver, c.DSN())
|
||||||
|
|
||||||
// run migrations
|
// run migrations
|
||||||
db.Migrate()
|
db.Migrate()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user