Add support for FATHOM_DATABASE_URL

This commit is contained in:
Charley DAVID 2018-07-29 13:32:04 -03:00
parent 773a65ff94
commit 98970057a2
No known key found for this signature in database
GPG Key ID: CE3D4C4F070B2FFA
4 changed files with 45 additions and 15 deletions

View File

@ -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"

View File

@ -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)

View File

@ -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

View File

@ -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()