【发布时间】:2018-01-06 00:20:49
【问题描述】:
app.yaml
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
我的main.go 文件:
主包
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 可以正常工作,并将应用正确部署到谷歌云。
但是,将我带到该站点的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 主要方法。我可能会错过什么?
编辑:
将处理程序更改为
- url: /
结果:
2018-01-06 00:17:30 default[20180106t010915] "GET / HTTP/1.1" 404
.. 代替?
【问题讨论】:
-
你的
script:在你的app.yaml应该指向main.go -
但是 Google 的文档指出:
For Go apps, script should always have a value of _go_app.? cloud.google.com/appengine/docs/standard/go/config/… -
我的错,刚刚再次检查。你说没有
appengine.Main()在本地运行就好了,上传的时候也是这样吗? -
不,如果您在没有
appengine.Main()的情况下上传,则会收到错误:parser: found a top level package main with function main, but main does not call appengine.Main(); -
您的应用引擎是否使用了柔性环境?在 appengine github 上,它声明它与该环境不兼容:github.com/golang/appengine
标签: google-app-engine nginx go