使用本地程序包的部署构建失败,导入路径不以主机名"开头。

时间:2016-10-22 04:18:31

标签: heroku go deployment circleci

我是Go的新手,我想这对于过去使用Go部署的任何人来说都是一个明显的情况。在大多数TL; DR意义上,我使用Go(https://apacheignite.readme.io/docs/sql-queries)在Scotch.IO中构建了一个简单的待办事项列表的演示项目,它在我的机器上完美运行,但是当它尝试时它在CircleCI中中断导入本地定义的包:

  import (
     "database/sql"
     "net/http"
     "strconv"

     "go-todo/models" // <- This

     "github.com/labstack/echo"
  )

我知道没有真正的理由来部署像这样的应用程序,但我想在深入部署必不可少的大型项目之前更好地理解它。断点处的日志为:

package go-todo/handlers: unrecognized import path "go-todo/handlers" (import path does not begin with hostname)
package go-todo/models: unrecognized import path "go-todo/models" (import path does not begin with hostname)

虽然从远程环境的角度来看我认为路径是不完整的,但我也知道相对的路径不会解决它,我必须假设我的无知正在制造一些环境变量在这种情况下我是盲目的。

值得注意的是,远程包的所有go get调用都可以正常播放。

任何帮助将不胜感激。改进我的谷歌搜索只会带回一堆看似无关的问题。

1 个答案:

答案 0 :(得分:1)

您需要在$GOPATH(外部库)或$GOROOT(标准库)

中包含所有导入的库

go get命令可以从远程获取库并将它们放入$GOPATH

因此,如果您go get github.com/labstack/echo,它会从网址中提取图书馆并将其放在$GOPATH/github.com/labstack/echo本地。

无法像这样远程提取库go-todo/models,因此您需要在CI中确保它已被复制并在$GOPATH/go-todo/models本地可用。

或者您可以尝试vendoring