我构建了一个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中。我打过
在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 browse