【问题标题】:App Engine deploy with Go libraries使用 Go 库部署 App Engine
【发布时间】:2017-05-27 22:11:03
【问题描述】:

我是 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

【问题讨论】:

    标签: google-app-engine go gcloud


    【解决方案1】:

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

    快速解决方案

    # Instal godep:
    go get -v -u github.com/tools/godep
    
    cd your/project/path
    godep save
    

    现在尝试再次部署,您会在项目中看到一个 vendor 文件夹,不要删除它并将其添加到您的 git 源中,该文件夹包含您的所有第三方依赖项,例如您的httprouter(这是我最喜欢的:))

    注意你可以使用其他工具来保存你的依赖关系

    【讨论】:

    • 感谢您的回答。它为我创建了 2 个文件夹 Godeps 和 vendor(其中包含我的依赖项的内容);但我仍然从 App Engine 收到相同的错误:main.go:4: can't find import: "github.com/julienschmidt/httprouter"
    • 您是否在 app.yaml 中包含所有内容?
    • 嗨,我在编辑中添加了我的 app.yaml 的内容 :) 阅读@Ain 的回复,GoDeps 似乎无法帮助我。是真的吗?
    • 不确定应用引擎的确切Go版本是什么,但如果是旧版本,您应该尝试export GO15VENDOREXPERIMENT=1,这个问题看起来像应用引擎问题,尝试找到如何包含所有文件和子文件夹
    【解决方案2】:

    我还没有使用过gcloud 工具,但早在goapp 是您必须在@ 下直接创建github.com/julienschmidt/httprouter 的工具(当然,其中包含lib 的源代码)时987654324@然后部署。

    AFAIK App Engine 的 go 版本目前是 1.6,这意味着虽然默认情况下供应商处于打开状态,但可以将其关闭 - 也许就是这种情况,这就是 @Yandry Pozo 的建议不起作用的原因。

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 2019-12-04
      • 2017-11-27
      • 2015-11-13
      • 2017-12-24
      • 2015-02-19
      • 2013-10-23
      • 1970-01-01
      • 2021-09-24
      相关资源
      最近更新 更多