当前位置: 首页 > 面试题库 >

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

漆雕和昶
2023-03-14
问题内容

我构建了一个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

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

谢谢!


问题答案:

解:

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


 类似资料:
  • 我创建了一个jsp web应用程序。真正的任务是我必须使用WINSCP在大学服务器上托管我的项目。但是当我使用大学域名测试这个项目时,我得到了这个错误 类型异常报告 消息无法为JSP编译类: 说明服务器遇到内部错误,无法满足此请求。 异常org.apache.jasper.JasperExctive:无法为JSP编译类:在生成的java文件中的行:[15]处发生错误:[C:\tomcat\work

  • 我创建了一个rails 4.1.4应用程序,试图在heroku上运行,但我得到以下错误- 缺少环境的

  • 问题内容: 这是我第一次使用axios,遇到错误。 使用正确的url和参数,当我检查网络请求时,确实可以从服务器中获得正确的答案,但是当我打开控制台时,我看到它没有调用回调,而是捕获了错误。 错误:网络错误堆栈跟踪:createError @ http:// localhost:3000 / static / js / bundle.js:2188:15 handleError @ http://

  • HTTP 分布式系统

  • HTTP 超文本传输协议 (HTTP) 是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信的基础。 Requests Python 基本的 urllib2 模块提供了大部分你所需要的 HTTP 功能,但它的 API 彻底被打乱了。它是在一个和现今完全不同的时期 --- 以及一个不一样的网络被构建的。一个简单的任务便需要耗费他大量的工作 (即使重写函数没用)。 Req

  • 'java。lang.ClassNotFoundException:javax。面孔。网络应用。当我使用WebLogic 1o在MyEclipse IDE中运行struts应用程序时,出现UIComponentTag错误。2 Web服务器。 虽然我添加了这个JSF api,但我没有使用任何JSF库函数。jar文件在lib文件夹中比这个问题得到解决,但在浏览器窗口上应用程序仍然没有运行。它显示为。。