Golang Revel Assertf导致恐慌
问题描述:
我已经创建了Revel测试套件,我使用Assertf检查错误。Golang 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)
答
Assert会触发恐慌,并且panic过滤器失败,因为它无法找到导致错误的go代码的源文件。如果你已经从部署中删除了源文件,这可能会导致(恕我直言,它实际上不应该),但看着它正在试图加载堆栈说有错误的文件的代码。
答
这是由于一个错误的狂欢 - https://github.com/revel/revel/issues/1287
的问题是,你的服务器有GOPATH设置等于/go
,陶醉错误地标识的堆栈跟踪(/usr/local/go/src/runtime/debug/stack.go:24
)的第一帧作为GOPATH因为是它包含/go/src
。您可以通过在任意位置的路径中手动设置/维护不包含/go
的服务器上的其他GOPATH来解决此问题。这也是与官方码头集装箱的问题去找到在https://hub.docker.com/_/golang/
https://github.com/revel/revel/issues/1266 –