Golang Revel Assertf 引起恐慌

Golang Revel Assertf causes panic

我创建了 revel 测试套件,我使用 Assertf 检查错误。

t.Assertf(err == nil, "error occurred: %v", err)

它在我的 Windows 和 Mac OSX 中没有任何问题。但是在我的远程服务器 Ubuntu 16.04 中,每当断言错误时,我都会收到这样的错误消息。

server.go:2753: http: panic serving [::1]:44626: open /go/src/runtime/debug/stack.go: no such file or directory

goroutine 74 [running]:
net/http.(*conn).serve.func1(0xc4204a7f40)
    /usr/local/go/src/net/http/server.go:1721 +0xd0
panic(0xa04ba0, 0xc4204c2f60)
    /usr/local/go/src/runtime/panic.go:489 +0x2cf
github.com/revel/revel.MustReadLines(0xc420198a4c, 0x1e, 0x1, 0xc4204d2a80, 0x3e)
    /go/src/github.com/revel/revel/util.go:56 +0x168
github.com/revel/revel.NewErrorFromPanic(0xa04ba0, 0xc4204c2f00, 0x0)
    /go/src/github.com/revel/revel/errors.go:63 +0x25b
github.com/revel/revel.handleInvocationPanic(0xc42024e0c0, 0xa04ba0, 0xc4204c2f00)
    /go/src/github.com/revel/revel/panic.go:25 +0x4d
github.com/revel/revel.PanicFilter.func1(0xc42024e0c0)
    /go/src/github.com/revel/revel/panic.go:16 +0x5c
panic(0xa04ba0, 0xc4204c2f00)
    /usr/local/go/src/runtime/panic.go:489 +0x2cf
github.com/revel/revel.InterceptorFilter.func1(0xc42024e0c0)
    /go/src/github.com/revel/revel/intercept.go:97 +0x7d
panic(0xa04ba0, 0xc4204c2f00)
    /usr/local/go/src/runtime/panic.go:489 +0x2cf
github.com/revel/revel.MustReadLines(0xc42018605a, 0x1e, 0x1, 0xc420278d10, 0xad)
    /go/src/github.com/revel/revel/util.go:56 +0x168
github.com/revel/revel.NewErrorFromPanic(0x9feea0, 0xc4204d8aa0, 0xc4204d8aa0)
    /go/src/github.com/revel/revel/errors.go:63 +0x25b
github.com/revel/modules/testrunner/app/controllers.TestRunner.Run.func1.1(0xaa9ba0, 0xc4204c2a80, 0x16, 0xc4204d284c, 0x15, 0xc4204d2862, 0x14, 0xc4203fac78)
    /go/src/github.com/revel/modules/testrunner/app/controllers/testrunner.go:113 +0x70
panic(0x9feea0, 0xc4204d8aa0)
    /usr/local/go/src/runtime/panic.go:489 +0x2cf
github.com/revel/revel/testing.(*TestSuite).Assertf(0xc4204c2a80, 0xc4203fa600, 0xac7700, 0x16, 0xc4203fa620, 0x1, 0x1)
    /go/src/github.com/revel/revel/testing/testsuite.go:313 +0x87
madvrstudio/bnkjigsaw/tests.(*ReceiptValidationTest).TestValidateAppStore(0xc4204c2a80)

断言触发恐慌,恐慌过滤器失败,因为它无法找到导致错误的 go 代码的源文件。如果您从部署中删除了源文件,这可能会导致这种情况(恕我直言,它确实不应该)但是查看它试图加载堆栈说有错误的文件的代码。

这是由于 revel 中的错误 - https://github.com/revel/revel/issues/1287

问题是您的服务器将 GOPATH 设置为 /go,并且 Revel 错误地将堆栈跟踪的第一帧 (/usr/local/go/src/runtime/debug/stack.go:24) 识别为在 GOPATH 中,因为它包含 /go/src.您可以通过在您的服务器上手动 setting/maintaining 一个不包含 /go 路径中任何地方的不同 GOPATH 来解决这个问题。这也是在 https://hub.docker.com/_/golang/

找到的官方 docker 容器的问题