2017-07-09 12 views
6

Google App Engine(標準)に小さなテストアプリを導入しようとしています。ベンダーのライブラリを含めるとエラーが表示されます。Google App EngineでGoベンダーライブラリを使用することはできますか?

これは、いくつかの状況については

% gcloud app deploy 
Services to deploy: 

descriptor:  [/Users/matt/work/appenginetest1/src/hello/default/app.yaml] 
source:   [/Users/matt/work/appenginetest1/src/hello/default] 
target project: REDACTED 
target service: [default] 
target version: [20170709t220721] 
target url:  REDACTED 


Do you want to continue (Y/n)? y 

Beginning deployment of service [default]... 
╔════════════════════════════════════════════════════════════╗ 
╠═ Uploading 0 files to Google Cloud Storage    ═╣ 
╚════════════════════════════════════════════════════════════╝ 
File upload done. 
Updating service [default]...failed. 
ERROR: (gcloud.app.deploy) Error Response: [9] Deployment contains files that cannot be compiled: Compile failed: 
go-app-builder: build timing: 2×compile (210ms total), 0×link (0s total) 
go-app-builder: failed running compile: exit status 2 

main.go:6: can't find import: "github.com/julienschmidt/httprouter" 

を展開しようとしたとき、私は取得エラーです、これは$ GOPATHの木

% tree $GOPATH 
/Users/matt/work/appenginetest1 
└── src 
    └── hello 
     ├── default 
     │   ├── app.yaml 
     │   └── main.go 
     ├── glide.lock 
     ├── glide.yaml 
     └── vendor 
      └── github.com 
       └── julienschmidt 
        └── httprouter 
         ├── path.go 
         ├── router.go 
         └── tree.go 

dev_appserver.pyが正常に動作を介してローカルサーバーを実行しています。私はからgithub.comディレクトリを移動する場合はそれもクラウド

% gcloud app deploy 
ERROR: (gcloud.app.deploy) Staging command [/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/goroot-1.6/bin/go-app-stager /Users/matt/work/appenginetest1/src/hello/default/app.yaml /var/folders/nx/8w2_6q551cl50h3ff6lmy9s40000gn/T/tmp97Kiis/tmpe0MHQ0] failed with return code [1]. 

------------------------------------ STDOUT ------------------------------------ 
------------------------------------ STDERR ------------------------------------ 
2017/07/09 22:12:52 failed analyzing /Users/matt/work/appenginetest1/src/hello/default: cannot find package "github.com/julienschmidt/httprouter" in any of: 
    /Users/matt/work/appenginetest1/src/hello/vendor/github.com/julienschmidt/httprouter (vendor tree) 
    ($GOROOT not set) 
    /Users/matt/work/appenginetest1/src/github.com/julienschmidt/httprouter (from $GOPATH) 
GOPATH: /Users/matt/work/appenginetest1 
-------------------------------------------------------------------------------- 

にプッシュする前に

% rm -rf ~/work/appenginetest1/src/hello/vendor/github.com 

またエラーを実行した後など、ベンダーのディレクトリを見つけていないアプリエンジンの場合のようには見えません。ベンダーがsrcに接続すると、デプロイメントは問題なく動作します。私はグライドのインストールを実行した後に、ベンダーからのSRCにgithub.comディレクトリを移動した場合、私はこのプロジェクトを展開するために取得することができます

app.yamlを

service: default 
runtime: go 
api_version: go1 


handlers: 
- url: /.* 
    script: _go_app 

main.go

package hello 

import (
    "fmt" 
    "net/http" 
    "github.com/julienschmidt/httprouter" 
) 

func init() { 
    router := httprouter.New() 
    router.GET("/hello/:name", Hello) 
    http.Handle("/", router) 
} 

func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { 
    fmt.Fprintf(w, "Hello, %s!", ps.ByName("name")) 
} 

。あなたの$GOPATH環境変数は、実際に複数の場所のリストが(多くのためhttps://golang.org/cmd/go/#hdr-GOPATH_environment_variableを参照)することができます

+0

Matt、あなたはこの問題を根気よく解決しましたか? –

答えて

0

注:

GOPATH環境変数リストの所に行くコードを探すために。 On Unixでは、値はコロンで区切られた文字列です。 Windowsでは、値は で、セミコロンで区切られた文字列です。 Plan 9では、値がリストになります。

よりもむしろSRCにベンダーからgithub.comディレクトリを移動し、あなたが一時的に$GOPATH環境変数にvendor/github.comディレクトリを追加するスクリプトを書くことができ、展開を実行し、環境変数から削除します。

関連する問題