我构建了一个Golang Web应用程序,前端是Google BigQuery项目的前端。该应用程序具有这些导入
import (
"context"
"html/template"
"log"
"net/http"
"regexp"
"strings"
"strconv"
"cloud.google.com/go/bigquery"
"google.golang.org/api/iterator"
)
以及 BigQuery 安全凭证的 JSON 文件。在本地,它在 localhost:8080 上完美运行。然后,我尝试使用Google App Engine托管它,并遇到了一些错误。
对于Google App Engine部署,我首先在本地安装了Google Cloud SDK,运行了gcloud init,然后安装了
gcloud components install app-engine-go
bq
core
gsutil
gcloud
beta
app-engine-python
包。我从main.go中删除了main((函数,项目目录有一个YAML文件。我跑了
gcloud config set project {correct project ID}
在DOS窗口中,我运行了
gcloud app deploy
在项目目录中。我收到此错误(针对SO格式化并删除私人信息(:
C:Golang Web Devgolang-web-dev-masterbigqueryApp_AppEngine>gcloud app deploy
ERROR: (gcloud.app.deploy)
Staging command
[C:Program Files (x86)GoogleCloud SDKgoogle-cloud-sdkplatformgoogle_appenginegoapp-stager.exe
C:Golang Web Devgolang-web-dev-masterbigqueryApp_AppEngineapp.yaml
C:Golang Web Devgolang-web-dev-masterbigqueryApp_AppEngine
c:----------appdatalocaltemp----------------]
failed with return code [1].
-------------------------------------STDOUT-------------------------------------
-------------------------------------STDERR-------------------------------------
2017/07/18 18:14:44 failed analyzing C:Golang Web Devgolang-web-dev-masterbigqueryApp_AppEngine:
cannot find package "google.golang.org/appengine/socket" in any of:
($GOROOT not set)
C:Go Workspacesrcgoogle.golang.orgappenginesocket (from $GOPATH)
GOPATH: C:Go Workspacesrcgoogle
我将此错误追溯到导入的
"cloud.google.com/go/bigquery"
打包;另一个没有 cloud.google.com/go/bigquery 的"测试"应用程序使用此技术可以正常工作。我尝试导入
google.golang.org/appengine/socket
包在应用程序中,我得到了另一个编译错误; 看起来这个页面说甚至不要去那里。接下来,我使用原始应用程序尝试了此视频中的想法,将原始的main((函数保留在main.go中。我打字了
gcloud app deploy
在云外壳窗口中。我明白了
$ ---_---------@---------------X------:~/bigqueryApp
$ gcloud app deploy
ERROR: (gcloud.app.deploy) Staging command [/google/google-cloud-sdk/platform/google_appengine/goroot-1.6/bin/go-app-stager
/home/---_---------/bigqueryApp/app.yaml /tmp/---------/---------]
failed with return code [1].
------------------------------------ STDOUT ------------------------------------
------------------------------------ STDERR ------------------------------------
2017/07/18 21:30:23 failed analyzing /home/---_---------/bigqueryApp:
cannot find package "google.golang.org/api/iterator" in any of:
($GOROOT not set)
/home/---_---------/gopath/src/google.golang.org/api/iterator (from $GOPATH)
/google/gopath/src/google.golang.org/api/iterator
GOPATH: /home/---_---------/gopath:/google/gopath
错误。应用会明确导入迭代器包。我研究/实验/等来修复这两种技术中的错误,但没有运气。如果有人有想法:如何修复这些错误,我想知道他们,我将不胜感激。
谢谢!
解决方案:
1( 删除"上下文"导入
2(进口"google.golang.org/appengine";看
[https://github.com/golang/appengine/blob/master/README.md][1]
有关更多详细信息,请参阅:本地应用程序引擎包安装
3( 此功能
http.HandleFunc("/", bqPage)
调用
bqPage(w http.ResponseWriter, req *http.Request)
作为处理程序函数。将第二个 req 参数传递给构建/调用 bigquery 客户端的代码:
ctx := appengine.NewContext(req)
// Get the projectID value from the Google Cloud Console:
projectID := "--------------"
// Create a client.
client, err := bigquery.NewClient(ctx, projectID)
拥有客户端对象后,即可开展业务。
4( 从指向托管 main.go 文件的目录的 DOS 窗口中,运行
gcloud app deploy
然后运行应用
gcloud app browse