【问题标题】:How do you install Go dependencies when deploying to Elastic Beanstalk?部署到 Elastic Beanstalk 时如何安装 Go 依赖项?
【发布时间】:2016-08-23 02:21:17
【问题描述】:
我有一个应用程序被分成几个不同的文件,但我在部署它时遇到了问题。我关注了this documentation,但我得到了以下信息:
application.go:7:5: cannot find package "github.com/gorilla/handlers" in any of:
我假设我需要安装我在 $GOPATH 中使用的库作为部署过程的一部分,但我不知道该怎么做,也没有找到任何示例。使用 Procfile 似乎很有希望,但我的所有搜索都不断将我引向 Heroku 资源。
【问题讨论】:
标签:
amazon-web-services
go
deployment
amazon-elastic-beanstalk
【解决方案1】:
您可以使用供应商工具将所有依赖项存储在供应商文件夹中。
我使用govendor。
Steps:
1. go get -u github.com/kardianos/govendor
2. cd $GOPATH/yourProject
3. govendor init
4. govendor add +external
现在目录 'yourProject' 可以在任何机器上独立构建,只要它位于 $GOPATH 中。
注意:需要 Go 1.6+ 或 1.5 且 GO15VENDOREXPERIMENT=1。
编辑: 根据fl0cke 的评论。如果 Elastic Beanstalk 仅支持 Go 1.4,则可能的选项是:
【解决方案2】:
我遇到了同样的问题,并且能够使用 eb client 解决它。
仅涵盖基础知识:
主文件的名称应为application.go。
确保您的应用正在侦听端口 5000。
-
您需要在主根目录中使用Procfile
web: bin/application
-
你需要一个Buildfile
make: ./build.sh
-
最后你需要一个 build.sh 文件
#!/usr/bin/env bash
# Stops the process if something fails
set -xe
# All of the dependencies needed/fetched for your project.
# This is what actually fixes the problem so that EB can find your dependencies.
# FOR EXAMPLE:
go get "github.com/gin-gonic/gin"
# create the application binary that eb uses
GOOS=linux GOARCH=amd64 go build -o bin/application -ldflags="-s -w"
然后,如果您运行 eb deploy(在创建初始 eb 存储库之后),它应该可以工作。我认为您可以通过压缩 application.go、Procfile、Buildfield 和 build.sh 脚本并将其加载到 Elastic Beanstalk 控制台来获得相同的结果,但我还没有尝试过。
我编写了一个完整的教程,用于在 EB here 上部署 Gin 应用程序。专门关于使用 Elastic Beanstalk 进行部署的部分是 here。
【解决方案3】:
截至 2019 年年中,这对我有效。要点是编译本地并上传你的二进制文件。从你的项目根目录运行:
GOARCH=amd64 GOOS=linux go build -o bin/application
然后将此二进制文件包含在您上传到 EB 控制台的应用程序 zip 中。