我的 go web 应用程序中有以下处理程序:
func pleaseLoginHandler(w http.ResponseWriter, req *http.Request) {
http.ServeFile(w, req, "./pleaselogin.html")
}
通过使用以下方法为路由 http://a.b.org/pleaselogin
调用此处理程序:
rtr.HandleFunc("/pleaselogin", pleaseLoginHandler)
应用程序在本地运行没有任何问题。此外,如果我从所有应用程序文件所在的文件夹运行可执行文件,它也可以在远程服务器上运行。也就是说,如果应用程序位于 /home/username/go/src/appdirectory/appexecfile
位置,我通过转到此目录并将其作为 ./appexecfile< 启动应用程序
然后所有路由都按预期工作。
当我使用supervisord
启动应用程序时出现问题。在这种情况下,如果我访问路由 http://a.b.org/pleaselogin
,服务器将返回 404 not found 错误。我的猜测是,这是因为 http.ServeFile 使用的是相对路径,当应用程序以 supervisord
启动时,它不知道要在 /home/user/go 中查找文件/src/应用目录
.
有人可以建议解决这个问题吗?我可以使用另一种方法在 golang 应用程序中提供文件来避免这个问题吗?或者,我可以在 supervisord
中使用一个设置,让它查找与应用程序的可执行文件相关的任何文件吗?
谢谢。
最佳答案
好吧,刚刚发现我可以在 supervisord
配置中添加目录选项。添加,
directory=/home/username/go/src/appdirectory/
解决问题。但是,如果有其他更好的解决方案,我很乐意看到它们。
关于go - http.ServeFile 在服务器 golang 上返回 404 not found 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37095379/