2017-07-09 29 views
6

Küçük bir test uygulamasını Google App Engine'e (standart) dağıtmaya çalışıyorum. Satıcı kitaplıklarını eklediğimde bir hata alıyorum. Go satıcı kütüphanelerini Google App Engine ile kullanmak mümkün mü?

Bu

bazı içerik için

% 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" 

dağıtmak çalışırken alıyorum hatadır, bu ince dev_appserver.py üzerinden yerel sunucu Koşu $ 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 

ağaç işleri olduğunu. Ben gelen github.com dizini taşırsanız O bile bulut

% 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 
-------------------------------------------------------------------------------- 

için bastırıyor önce

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

hatalara çalıştırdıktan sonra olarak satıcı dizini bulma uygulaması motorun bir durumda benzemiyor src için satıcı, dağıtımı bir sorun olmadan çalışır.

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")) 
} 

Ben süzülme işlemi çalıştırıldıktan sonra src satıcıya github.com dizini taşırsanız ben dağıtmak için bu projeyi alabilirsiniz. senin $GOPATH ortam değişkeni aslında birden fazla yerde bir listesi (fazlası için https://golang.org/cmd/go/#hdr-GOPATH_environment_variable bakın)

+0

Matt, bu soruna hiç akıl almaz bir çözüm buldunuz mu? –

cevap

0

Not:

GOPATH ortam değişkeni listeleri yerleri Git koduna bakmak için. Unix'te, değer iki noktaya ayrılmış bir dizedir. Windows'ta, değer noktalı virgülle ayrılmış bir dizedir. Plan 9'da, değer bir listedir.

Aksine src satıcıya github.com dizini ilerlemek yerine, geçici olarak $GOPATH ortam değişkenine vendor/github.com dizini ekleyen bir senaryo yazabilirim dağıtım gerçekleştirir ve ardından ortam değişkeni kaldırır.