Beim Bereitstellen einer Go-Anwendung auf Heroku mit Godep-Unterstützung wird die Der Build ist erfolgreich, aber der Zugriff auf den Endpunkt führt zu einem „Anwendungsfehler“.
Der folgende Code wird in der Anwendung verwendet:
import ( "log" "fmt" "net/http" "os" "github.com/gorilla/mux" "github.com/gorilla/context" "gopkg.in/paytm/grace.v1" ) func main() { log.Println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CHIT STARTED $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$") log.Println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$") muxRouter := mux.NewRouter() muxRouter.HandleFunc("/", Articles) http.Handle("/", muxRouter) port := os.Getenv("PORT") if port == "" { port = "9000" // Default port if not specified } err := grace.Serve(":" + port, context.ClearHandler(http.DefaultServeMux)) if err != nil { log.Println("[ERROR GRACEFUL]", err) os.Exit(1) } os.Exit(0) } func Articles(w http.ResponseWriter, r *http.Request) { // vars := mux.Vars(r) w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "Hello") // r.Close = true // w.Header().Set("Content-Type", "application/json") // w.Header().Set("Access-Control-Allow-Origin", "*") /*if r.Method == "OPTIONS" { w.WriteHeader(http.StatusOK) return } if err := fn(w, r); err != nil { log.Println(err) apiObject := ConstructAPIError(http.StatusInternalServerError, ErrGeneral, SysMsgErrGeneral, MsgErrGeneral) SendAPIObject(w, apiObject) return }*/ }
Die Heroku-Protokolle während der Bereitstellung lauten wie folgt:
-----> Go app detected -----> Fetching jq... done -----> Fetching stdlib.sh.v8... done -----> Checking Godeps/Godeps.json file. -----> New Go Version, clearing old cache -----> Installing go1.12.6 -----> Fetching go1.12.6.linux-amd64.tar.gz... done -----> Running: go install -v -tags heroku ./... bitbucket.org/michaelchandrag/chit/pkg bitbucket.org/michaelchandrag/chit/vendor/github.com/gorilla/context bitbucket.org/michaelchandrag/chit/vendor/github.com/gorilla/mux bitbucket.org/michaelchandrag/chit/vendor/gopkg.in/tylerb/graceful.v1 bitbucket.org/michaelchandrag/chit/vendor/gopkg.in/paytm/grace.v1 bitbucket.org/michaelchandrag/chit/pkg/util bitbucket.org/michaelchandrag/chit Installed the following binaries: ./bin/chit -----> Discovering process types Procfile declares types -> web -----> Compressing... Done: 7.5M -----> Launching... Released v3 https://michaelchandrag-project.herokuapp.com/ deployed to Heroku
Die Anwendungsprotokolle vor und nach dem Zugriff Der Endpunkt ist:
2:47.954106+00:00 heroku[web.1]: Starting process with command `chit` 2019-07-08T05:02:49.413453+00:00 app[web.1]: 2019/07/08 05:02:49 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CHIT STARTED $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 2019-07-08T05:02:49.413476+00:00 app[web.1]: 2019/07/08 05:02:49 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 2019-07-08T05:02:49.413647+00:00 app[web.1]: 2019/07/08 05:02:49 starting serve on :9000 2019-07-08T05:03:48.131507+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 2019-07-08T05:03:48.131595+00:00 heroku[web.1]: Stopping process with SIGKILL 2019-07-08T05:03:48.214979+00:00 heroku[web.1]: State changed from starting to crashed 2019-07-08T05:03:48.193205+00:00 heroku[web.1]: Process exited with status 137 2019-07-08T10:38:59.721224+00:00 heroku[web.1]: State changed from crashed to starting 2019-07-08T10:39:00.359017+00:00 heroku[web.1]: Starting process with command `chit` 2019-07-08T10:39:02.232435+00:00 app[web.1]: 2019/07/08 10:39:02 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CHIT STARTED $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 2019-07-08T10:39:02.232458+00:00 app[web.1]: 2019/07/08 10:39:02 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 2019-07-08T10:39:02.232583+00:00 app[web.1]: 2019/07/08 10:39:02 starting serve on :9000 2019-07-08T10:40:00.462841+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 2019-07-08T10:40:00.462974+00:00 heroku[web.1]: Stopping process with SIGKILL 2019-07-08T10:40:00.555959+00:00 heroku[web.1]: Process exited with status 137 2019-07-08T10:40:00.573427+00:00 heroku[web.1]: State changed from starting to crashed
Die Anwendung startet, wird aber beendet, weil sie es tut nicht an den angegebenen Port binden. Dies geht aus der Heroku-Protokollmeldung hervor:
2019-07-08T05:03:48.131507+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
Um dieses Problem zu beheben, muss der Webserver an den Port gebunden sein, der durch die Umgebungsvariable PORT angegeben wird. Auf Heroku ist der HTTP-Server über Heroku-Gateways auf Standard-HTTP- und HTTPS-Ports öffentlich verfügbar.
Daher sollte die Anwendung an den angegebenen Port binden und nicht an:9000.
Das obige ist der detaillierte Inhalt vonWarum ist die Bereitstellung meiner Go-App auf Heroku erfolgreich, obwohl die Anwendung trotz erfolgreicher Erstellung einen „Anwendungsfehler' anzeigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!