2017-02-13 42 views
9

我有一个预先存在的golang项目,其中包含以下文件夹结构(为了提高可读性最小化文件夹)。将cmd文件夹中的golang应用程序部署到AWS Beanstalk

- postgre 
    - service.go 
- cmd 
    - vano 
     - main.go 
    - vanoctl 
     - main.go 
vano.go 

现在,因为我的项目的Web服务器是./cmd/vano我需要创建一个自定义的BuildfileProcfile。所以我做了

这里是我的构建文件

make: ./build.sh 

build.sh文件:

#!/usr/bin/env bash 

# Install dependencies. 
go get ./... 
# Build app 
go build ./cmd/vano -o bin/application 

最后我Procfile:

web: bin/application 

所以现在我的文件夹结构看起来像这个:

- postgre 
    - service.go 
- cmd 
    - vano 
     - main.go 
    - vanoctl 
     - main.go 
vano.go 
Buildfile 
build.sh 
Procfile 

我拉上使用Git源:

git archive --format=zip HEAD > vano.zip 

,并上传到AWS魔豆。我如何不断收到错误,并且AWS错误似乎不是最符合要求的。这是我的错误

Command execution completed on all instances. Summary: [Successful: 0, Failed: 1]. 

错误消息

[Instance: i-0d8f642474e3b2c68] Command failed on instance. Return code: 1 Output: (TRUNCATED)...' Failed to execute 'HOME=/tmp /opt/elasticbeanstalk/lib/ruby/bin/ruby /opt/elasticbeanstalk/lib/ruby/bin/foreman start --procfile /tmp/d20170213-1941-1baz0rh/eb-buildtask-0 --root /var/app/staging --env /var/elasticbeanstalk/staging/elasticbeanstalk.env'. Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/01_configure_application.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI. 

额外的错误信息:

Failed to execute 'HOME=/tmp /opt/elasticbeanstalk/lib/ruby/bin/ruby /opt/elasticbeanstalk/lib/ruby/bin/foreman start --procfile /tmp/d20170213-1941-1baz0rh/eb-buildtask-0 --root /var/app/staging --env /var/elasticbeanstalk/staging/elasticbeanstalk.env' 
+1

它可能未能安装依赖项。它在'/ var/log/eb-activity.log'文件中说了什么? – mass

+1

为什么你不提供依赖关系,然后压缩代码。不需要去'去'/ ...'。 –

+0

看起来像工头失败,你的Procfile是否有效? –

回答

1

另一种方法在这里,而不是使用procfile等将的交叉编译的二进制文件(通常是非常无痛地去)并按照指南中的简单说明上传它:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/go-environment.html

你可以只是编译本地:

GOARCH=amd64 GOOS=linux go build -o bin/application ./cmd/vano 

然后上传应用程序文件的压缩,它应该工作,假设你的安装只需要这一个二进制运行。

+0

这是我不得不采取的方式,我不希望它加上我不喜欢这样的事实,它添加一个bin文件夹到我的应用程序,但它似乎是最简单的解决方案 – Rodrigo

+1

我使用这个解决方案,你可以使用最新的Go 1.8(AWS在Go 1.6上不是吗?),它可以加速部署,并且可以在上传之前在本地查看和修复任何错误,并且使您因为它可以在任何地方使用(GC,VPS等),所以对AWS基础架构的依赖性较低。我不介意bin文件夹:) –

+0

我要继续检查这个答案,它没有完全“回答”这个问题,但它确实提供了一个工作解决方案。 – Rodrigo

相关问题