Google App Engine Golang返回404页面未找到

时间:2018-01-06 00:20:50

标签: google-app-engine nginx go

app.yaml

runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

我的main.go文件:

package main

import (
    "fmt"
    "github.com/cbll/stockmarket-service/lib"
    "net/http"
    "log"
    "google.golang.org/appengine"
)

func main() {
    appengine.Main()
    fmt.Println("Starting the application...")
    // Run application until halted
    for {
        go lib.GetStockData()
        StockController()
    }
}


// Expose controller at http://localhost:8080/
func StockController() {
    var port = ":8080"

    fmt.Println("Starting web server listening on port", port)

    http.HandleFunc("/", lib.StocksHandler)
    log.Fatal(http.ListenAndServe(port, nil))
}

如果我注释掉appengine.Main(),我可以在本地运行它而不会出现任何问题。它从端口8080开始。

gcloud app deploy可以正常运行,并且可以将应用正确部署到Google云端。

然而,带我到网站的gcloud app browse会返回404 page not found。事实上,使用gcloud app logs read检查日志:

2018-01-06 00:04:18 default[20180106t010155]  + exec app
2018-01-06 00:08:32 default[20180106t010155]  "GET /" 404

我有点不确定在这里排除故障的地方。它在本地工作,它指定:8080作为它应该的端口(据我所知?),并导入appengine main方法。我能错过什么?

编辑:

将处理程序更改为

- url: /

结果:

2018-01-06 00:17:30 default[20180106t010915]  "GET / HTTP/1.1" 404

..而不是?

1 个答案:

答案 0 :(得分:3)

标准环境提供主程序并运行http服务器。将初始化代码放在init()函数中。不要使用包主。

package app

import (
    "github.com/cbll/stockmarket-service/lib"
    "net/http"
)

func init() {
    go lib.GetStockData()
    http.HandleFunc("/", lib.StocksHandler)
}