小编典典

在Google App Engine环境中托管的Golang网络应用出现错误;应用前端BigQuery

go

我构建了一个Golang网络应用,该应用在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 Dev\golang-web-dev-master\bigqueryApp_AppEngine>gcloud app deploy

ERROR: (gcloud.app.deploy)
Staging command

[C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\goapp-stager.exe    
C:\Golang Web Dev\golang-web-dev-master\bigqueryApp_AppEngine\app.yaml    
C:\Golang Web Dev\golang-web-dev-master\bigqueryApp_AppEngine    
c:\-----\-----\appdata\local\temp\--------\--------]

failed with return code [1].

-------------------------------------STDOUT-------------------------------------    
-------------------------------------STDERR-------------------------------------

2017/07/18 18:14:44 failed analyzing C:\Golang Web Dev\golang-web-dev-master\bigqueryApp_AppEngine:

cannot find package "google.golang.org/appengine/socket" in any of:
        ($GOROOT not set)
        C:\Go Workspace\src\google.golang.org\appengine\socket (from $GOPATH)    
GOPATH: C:\Go Workspace\src\google

我将此错误追溯到导入的错误

"cloud.google.com/go/bigquery"

包; 使用此技术,另一个没有cloud.google.com/go/bigquery的“测试”应用程序也可以正常工作。我试图导入

google.golang.org/appengine/socket

打包到应用程序中,然后出现另一个编译错误;好像此页面上说甚至不要去那里。接下来,我使用原始应用程序尝试了该vid中的想法,并将原始main()函数保留在main.go中。我打过

gcloud app deploy

在Cloud Shell窗口中。我懂了

$ ---_---------@---------------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

错误。该应用程序显然会导入迭代器包。我研究/尝试过等方法来修复这两种技术中的错误,但没有运气。如果有人有想法:如何解决这些错误,我想知道它们,我将不胜感激。

谢谢!


阅读 222

收藏
2020-07-02

共1个答案

小编典典

解:

1)删除“上下文”导入

2)导入“ google.golang.org/appengine”;看到

    [https://github.com/golang/appengine/blob/master/README.md][1]

有关更多详细信息,请参阅:本地appengine软件包安装

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)在DOS窗口中指向托管main.go文件的目录,运行

    gcloud app deploy

然后使用

    gcloud app browse
2020-07-02