From bff4e8f8cf6cf79f1cda2bacf4f164bd6d6a97bc Mon Sep 17 00:00:00 2001 From: Sergio Botero Date: Sat, 20 Dec 2014 10:57:40 -0800 Subject: [PATCH] Read port from env Allow the port to be set on the .env file to avoid using the port flag every time. --- start.go | 19 +++++++++++++++++-- start_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/start.go b/start.go index b1d7e3b..8d07a0c 100644 --- a/start.go +++ b/start.go @@ -13,6 +13,7 @@ import ( ) const shutdownGraceTime = 3 * time.Second +const defaultPort = 5000 var flagPort int var flagConcurrency string @@ -37,7 +38,7 @@ Examples: func init() { cmdStart.Flag.StringVar(&flagProcfile, "f", "Procfile", "procfile") cmdStart.Flag.Var(&envs, "e", "env") - cmdStart.Flag.IntVar(&flagPort, "p", 5000, "port") + cmdStart.Flag.IntVar(&flagPort, "p", defaultPort, "port") cmdStart.Flag.StringVar(&flagConcurrency, "c", "", "concurrency") cmdStart.Flag.BoolVar(&flagRestart, "r", false, "restart") } @@ -98,8 +99,22 @@ func (f *Forego) monitorInterrupt() { } } +func basePort(env Env) (int, error) { + if flagPort != defaultPort { + return flagPort, nil + } else if env["PORT"] != "" { + return strconv.Atoi(env["PORT"]) + } + return defaultPort, nil +} + func (f *Forego) startProcess(idx, procNum int, proc ProcfileEntry, env Env, of *OutletFactory) { - port := flagPort + (idx * 100) + port, err := basePort(env) + if err != nil { + panic(err) + } + + port = port + (idx * 100) const interactive = false workDir := filepath.Dir(flagProcfile) diff --git a/start_test.go b/start_test.go index 0808dd2..666e680 100644 --- a/start_test.go +++ b/start_test.go @@ -106,3 +106,30 @@ func TestParseConcurrencyFlagNoValue(t *testing.T) { } } + +func TestPortFromEnv(t *testing.T) { + env := make(Env) + port, err := basePort(env) + if err != nil { + t.Fatalf("Can not get base port: %s", err) + } + if port != 5000 { + t.Fatal("Base port should be 5000") + } + + env["PORT"] = "6000" + port, err = basePort(env) + if err != nil { + t.Fatalf("Can not get base port: %s", err) + } + if port != 6000 { + t.Fatal("Base port should be 6000") + } + + env["PORT"] = "forego" + port, err = basePort(env) + if err == nil { + t.Fatalf("Port 'forego' should fail: %s", err) + } + +}