1

Google BigQueryプロジェクトをフロントエンドするGolang Webアプリケーションを作成しました。アプリにはこれらのインポートがありますGoogle App Engine環境でホストされているGolang Webアプリケーションでエラーが発生しました。アプリのフロントエンド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の展開のために

は、私が最初に私はのgcloudのinitを実行し、ローカルのGoogle Cloud SDKをインストールして、私は

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 

パッケージをインポートしようとしましたが、別のコンパイルエラーが発生しました。それはthis pageがそこに行かないと言っているように見えます。次に、私はthis vidのアイデアを元のアプリケーションを使って試してみました。元のmain()関数をmain.goに保ちました。クラウドシェルウィンドウで

gcloud app deploy 

と入力しました。私はこれを持っています

$ [email protected]:~/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 

エラーです。アプリはイテレーターパッケージを明確にインポートします。両方のテクニックでバグを修正するために私は研究/実験/などを行いましたが、運はありません。誰かがアイデアを持っている場合、これらのバグを修正する方法を知りたいのですが、私は感謝しています。

ありがとうございました!

答えて

0

ソリューション:

1) "文脈" 輸入

2)のインポート「google.golangを削除します。ORG/AppEngineの ";詳細は

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

参照RE:ローカルAppEngineのパッケージのインストール

3)この関数

http.HandleFunc("/", bqPage) 

通話

bqPage(w http.ResponseWriter, req *http.Request) 

ハンドラ関数としてその2番目の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) 

クライアントオブジェクトを取得すると、ビジネスに参加していることになります。 DOSウィンドウから

4)

gcloud app deploy 

を実行し、

gcloud app browse 
でアプリを実行し、main.goファイルをホスティングしているディレクトリを指摘しました
関連する問題