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
..而不是?
答案 0 :(得分:3)
标准环境提供主程序并运行http服务器。将初始化代码放在init()函数中。不要使用包主。
package app
import (
"github.com/cbll/stockmarket-service/lib"
"net/http"
)
func init() {
go lib.GetStockData()
http.HandleFunc("/", lib.StocksHandler)
}