【问题标题】:Why does AWS elastic beanstalk fail to build my app?为什么 AWS elastic beanstalk 无法构建我的应用程序?
【发布时间】:2018-03-15 23:42:54
【问题描述】:

我有一个用 Go 编写的应用程序,我试图将其部署到 EB。 尝试访问它时,我从 nginx 收到错误 502,可能是因为应用程序没有运行。

查看日志,我收到很多错误,例如

14:01:29 build.1 | application.go:10:2: cannot find package "github.com/aws/aws-sdk-go/aws" in any of:
14:01:29 build.1 |  /opt/elasticbeanstalk/lib/go/src/github.com/aws/aws-sdk-go/aws (from $GOROOT)
14:01:29 build.1 |  /var/app/current/src/github.com/aws/aws-sdk-go/aws (from $GOPATH)

尽管事实上,我的所有依赖项都包含在 vendor 子目录下的应用程序包中。为什么 EB 不使用 vendoring?根据仪表板,它运行的是 Go 1.9,因此应该支持 vendoring。

【问题讨论】:

    标签: amazon-web-services go amazon-elastic-beanstalk vendoring


    【解决方案1】:

    您需要将 EBS 中的 GOPATH 设置为项目目录的根目录,假设您的 vendor 目录所在的位置有一个 src 目录。

    例如,假设这是您的项目结构:

    app/
        src/
            vendor/
    

    并假设该项目位于~/home,从而使其位置为~/home/app

    那么你的GOPATH 应该设置为~/home/app。 Go 将尝试通过$GOPATH/src/vendor 访问依赖项。


    但是,如果这是您之前使用的那种结构,那么您还需要在本地开发期间更新您的 GOPATH,所以如果您还没有这样做,那么我想您正在使用不同的类型设置...但是,只要您的项目按照我上面描述的结构进行构建,此解决方案就可以工作。

    【讨论】:

    • EB 需要在源包的根目录中有一个application.go,所以我的结构在本地有$GOPATH/src/myapp 的源代码,并且在其中有一个vendor 目录,在@ 旁边987654333@
    • 我对 EBS 不是很熟悉,但是有没有办法可以为 application.go 指定不同的位置?那将解决这个问题。我觉得有办法,很确定我以前用过,只是不记得在我的头上。
    • 是的,使用 Buildfile 和 Procfile,我能够转换我的项目布局。现在它只是不启动应用程序...谢谢您的回答
    • 没问题!很高兴它奏效了。现在启动应用程序,Buildfile/Procfile 中是否有类似于 Dockerfile 的CMD 部分的行(如果您以前使用过 docker)?换句话说,是否有一部分可以指定在启动时运行的操作?也许这就是您可以运行二进制文件的地方。
    • 只是工作目录的一些问题,导致应用程序在启动时崩溃。不过,感谢您的额外努力:)
    猜你喜欢
    • 2019-07-24
    • 2015-03-05
    • 2019-08-11
    • 1970-01-01
    • 2020-07-26
    • 2013-05-21
    • 1970-01-01
    • 2018-07-10
    • 2015-03-25
    相关资源
    最近更新 更多