我是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
答案 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;工作。