Heroku local没有使用我的最新代码。为什么?

Wol*_*ivy 5 git heroku go heroku-toolbelt

我正在尝试获得一个非常简单的数据库支持的golang heroku应用程序,它可以用作世界。

我的应用程序的已部署Heroku版本运行良好,如果我在本地手动测试它,则可以正常运行,但是heroku local顽固地使用了旧版本的代码。特别:

$ heroku local
forego | starting web.1 on port 8080
Run Code Online (Sandbox Code Playgroud)

可以,但是意外地提供了较旧版本的应用程序。另一方面,这是:

$ go run web.go
Run Code Online (Sandbox Code Playgroud)

和这个:

$ git push heroku master
Everything up-to-date
$ heroku open
Run Code Online (Sandbox Code Playgroud)

两者都符合我的期望,这是我代码的最新版本。

这真让我感到困惑。我已经阅读了所有文档,并仔细检查了所有内容的状态,找不到任何指示正在发生或可能导致此情况的内容。

我最好的猜测是heroku local,在未更新的地方使用编译的段塞。

Wol*_*ivy 4

问题在于,golang 是一种编译语言,heroku local仅使用最后一次构建,而不会自行启动重建。解决方法是记住在运行之前进行编译heroku local

$ go install
Run Code Online (Sandbox Code Playgroud)

如果您用于测试,很容易忘记这一点go run web.go,因为这不需要重新编译,并且 heroku 本身会自动进行构建,因此您可以go install在尝试使用之前永远不会运行heroku local

(实际上,我在写完整个问题后就想出了这一点,但我认为无论如何我都应该发布以供将来参考。)