http.ServeFile在服务器golang上返回404 not found错误

时间:2016-05-08 01:43:23

标签: go supervisord

我的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未找到错误。我的猜测是,这是因为http.ServeFile正在使用相对路径,当应用程序以supervisord启动时,它不知道在/home/user/go/src/appdirectory中查找文件。

有人可以建议解决这个问题吗?我可以使用另一种方法在golang应用程序中提供文件来避免这个问题吗?或者,我可以使用supervisord中的设置来查找与应用程序的可执行文件相关的任何文件吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

好的,我发现我可以在supervisord配置中添加目录选项。添加,

directory=/home/username/go/src/appdirectory/

解决了这个问题。但是,如果还有其他更好的解决方案,我很乐意看到它们。