2017-05-26 4 views
0

Googleサービスを使用するためにcloud.google.comパッケージを導入すると、私が書いている単純なGo GAE(Flexible)アプリはすぐにデプロイできません。デプロイログからの抜粋:デプロイ時のビルドエラー:appengine.AccessTokenを使用できません

... 
golang.org/x/oauth2/google 
# golang.org/x/oauth2/google 
_gopath/src/golang.org/x/oauth2/google/appengine_hook.go:12: cannot use appengine.AccessToken (type func(appengine.Context, ...string) (string, time.Time, error)) as type func("golang.org/x/net/context".Context, ...string) (string, time.Time, error) in assignment 
_gopath/src/golang.org/x/oauth2/google/appengine_hook.go:13: cannot use appengine.AppID (type func(appengine.Context) string) as type func("golang.org/x/net/context".Context) string in assignment 
... 

これは、展開するアプリ内でgo install -v -tags appenginevmを経由してローカルで再生することができます。アプリは、appenginevmタグなしでうまく構築されて動作します。

私はちょうどhelloworldの例に従ってそれを修正しましたが、この問題で他の誰かを見つけることはできませんでした。

誰でもこの修正方法を知っていますか、私は行方不明です。

ありがとうございます。完全なプログラムは以下の通りです。ここで

package main 

import (
    "context" 
    "fmt" 
    "log" 
    "net/http" 
    "time" 

    "cloud.google.com/go/storage" 
) 

var (
    client *storage.Client 
) 

func main() { 
    ctx := context.Background() 

    var err error 
    client, err = storage.NewClient(ctx) 
    if err != nil { 
     log.Fatal(err) 
     return 
    } 
    defer client.Close() 

    http.HandleFunc("/_ah/health", healthCheckHandler) 
    http.HandleFunc("/", indexHandler) 
    log.Print("Listening on http://localhost:8080") 
    log.Fatal(http.ListenAndServe(":8080", nil)) 
} 

func httpError(w http.ResponseWriter, err error) { 
    log.Println(err) 
    http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) 
} 

func healthCheckHandler(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprint(w, "OK") 
} 

func indexHandler(w http.ResponseWriter, r *http.Request) { 
    start := time.Now() 

    finish := time.Since(start) 
    fmt.Fprintf(w, "Done %v %v", finish) 
} 

はおそらく、それは私が」の古いバージョンを持っていたことが判明し

import "golang.org/x/net/context" 

代わりの

import "context" 

答えて

0

を使用する必要がありますapp.yaml

env: flex 
runtime: go 
0

ですgoogle.golang.org/ap私が気づいていなかったのは、 "gcloud app deploy"コマンドが、依存関係をリモートで解決する代わりに、これらの依存関係をすべてアップロードするように見えるということです。

このライブラリの古いローカルコピーは、リモートコンパイルプロセスを壊していました。

私は「-u google.golang.org/appengine取りに行く」実行し、それが失敗したことにより、純粋に好奇心を介してこれを考え出した:

package google.golang.org/appengine: google.golang.org/appengine is a custom import path 
for https://github.com/golang/appengine, but 
$GOPATH/src/google.golang.org/appengine is checked out from 
https://github.com/golang/appengine.git 

をだから私は今、それを被爆し、新しいコピーを得ましたすべての作品。

TL; DRリモートコンパイルエラーが発生した場合、ローカルパッケージが最新であることを確認してください。

関連する問題