【问题标题】:How do I deploy a Go application to Heroku with main package in subdirectory?如何使用子目录中的主包将 Go 应用程序部署到 Heroku?
【发布时间】:2015-01-06 14:37:38
【问题描述】:

我目前正在尝试使用 wercker 将 Go 应用程序部署到 Heroku。 Heroku 期望 main.go 位于存储库根目录中,但如果可能的话,我希望我的存储库目录看起来像这样。

project/
  cmd/
    my-server/
      main.go
  lib1/
  lib2/
  Procfile
  ...

理想情况下,我希望 Procfile 看起来像这样:

web: my-server -port $PORT

我已阅读this article,但由于我使用 wercker Go 框部署到 Heroku,我不确定配置它的最佳方法是什么。有人成功部署过这样的应用程序吗?

【问题讨论】:

    标签: heroku go wercker


    【解决方案1】:

    您正在为您的 Go 项目使用文件结构,这不允许您在构建过程中使用 godep,从而使其速度变慢。

    鉴于此,您需要创建一个.godir,它指定您的进程所在的模块名称。

    使用此内容创建一个.godir 文件:

    project/cmd/my-server
    

    并保持您的 Procfile 原样:

    web: my-server -port $PORT
    

    我什至不需要提到你需要使用 Go 自定义 buildpack:https://github.com/kr/heroku-buildpack-go.git

    有了这个.godir 文件,您将能够推送和部署您的应用程序。

    有关自定义 buildpack 使用 godep 的更多信息,请查看本指南 [1]。

    [1]http://mmcgrana.github.io/2012/09/getting-started-with-go-on-heroku.html

    【讨论】:

    • 我现在实际上正在使用 go-buildpack 和 Godeps,将 web.go 放在根目录中。我很好奇你觉得结构的哪一部分是非惯用的。如果您指的是 cmd/my-server,这就是标准库的结构方式。 .godir 对我来说是新的,我会看看它!
    • 使用 Godeps 时,buildpack 只能在 Procfile 中将你的根目录作为 web 进程执行。因此,如果你想执行另一个目录中的 server.go 文件,你需要使用 .godir 或创建一个不同的应用程序,其中 project/cmd/my-server 是你的根目录。
    • .godir 似乎是我正在寻找的,但如果我接受你的回答,我想知道你为什么觉得我提到的 SO 帖子中的文件结构(我正在使用的一个)是非惯用的。要么将您的答案更改为仅说明 Heroku 根本不支持它。不管怎样,谢谢!
    • 这可能是我的错,我以前从未见过这种结构,但我可以说camlistore 无论如何都是一个很好的参考。通常我将根包用作命令,将内部包用作库。而且我从不在我的包中使用文件夹名称,例如cmdsrclib。关于 Heroku 和其他类似平台(ftr,我为 cloudControl,一个欧洲 PaaS 工作),我只有在位于我的根域的 Procfile 中执行 Web 进程的经验。 .godir 会为你工作。
    【解决方案2】:

    对我有用的是

    godep save ./cmd/...

    然后将 vendor 文件夹中的所有内容添加到 repo 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 2019-08-08
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      相关资源
      最近更新 更多