登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-03-24 18:28:31 182浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《托管在 Google App Engine 环境中的 Golang 网络应用程序出错;应用前端 BigQuery》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到golang等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

我构建了一个前端 Google BigQuery 项目的 Golang 网络应用程序。该应用程序具有这些导入

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

错误。该应用程序清楚地导入了迭代器包。我研究/实验/等来修复这两种技术中的错误,但没有运气。如果有人有关于如何修复这些错误的想法,我想了解它们,我将不胜感激。

谢谢!

正确答案

解决方案:

1)删除“上下文”导入

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

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

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

  1. 这个功能

     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)

一旦你有了客户对象,你就开始做生意了。

  1. 从指向 main.go 文件所在目录的 DOS 窗口,运行

     gcloud app deploy
    

然后运行应用程序

    gcloud app browse

本篇关于《托管在 Google App Engine 环境中的 Golang 网络应用程序出错;应用前端 BigQuery》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>