使用Go库部署App Engine

时间:2017-05-27 22:11:03

标签: google-app-engine go gcloud

我是Google App Engine的新手。而且,我遇到了一个我无法解决的问题。

我有一个非常简单的应用程序(在Go中开发),如下所示:

main/
|   model/
|   |   user.go
|   main.go
|   app.yaml

这些是main.go的输入:

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

我在本地运行代码时效果很好。

但是,当我尝试在我的Google App Engine实例上发布它时,我收到此错误:

$ gcloud app deploy

You are about to deploy the following services:
 - <MY_APP_ENGINE_URL> (from [<MY_LOCAL_YAML_PATH>])
 Deploying to URL: [<MY_APP_ENGINE_URL>]

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

Beginning deployment of service [default]...
Some files were skipped. Pass `--verbosity=info` to see which ones.
You may also view the gcloud log file, found at
[<LOCAL_APP_ENGINE_LOG>].
File upload done.
Updating service [default]...failed.                                                                                                                                                             
ERROR: (gcloud.app.deploy) Error Response: [9] Deployment contains files that cannot be compiled: Compile failed:
2017/05/27 14:48:24 go-app-builder: build timing: 5×compile (301ms total), 0×link (0s total)
2017/05/27 14:48:24 go-app-builder: failed running compile: exit status 2

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

我做错了什么?

编辑: 这是我的app.yaml文件的内容:

runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

2 个答案:

答案 0 :(得分:1)

App Engine环境不包含您的依赖项,您可以添加一个脚本来为每个人执行...但是它太hacky并且Go有一个解决方案,我们可以保存我们依赖于项目根目录的供应商文件夹。

快速解决方案

# Instal godep:
go get -v -u github.com/tools/godep

cd your/project/path
godep save

现在尝试重新部署,您将在项目中看到供应商文件夹,不要删除它并将其添加到您的git源,该文件夹包含您的所有第三个文件夹派对依赖,比如你的httprouter(它是我最喜欢的:))

注意您可以使用其他工具来保存依赖项

答案 1 :(得分:0)

我还没有使用gcloud工具,但是当goapp是您必须创建github.com/julienschmidt/httprouter的工具时(使用lib的来源)当然,直接在你的main之下,然后部署。

AFAIK App Engine的版本目前是1.6,这意味着虽然默认开始销售,但它可以关闭 - 也许就是这种情况,这就是为什么@Yandry Pozo的建议没有&# 39;工作。