我的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
中的设置来查找与应用程序的可执行文件相关的任何文件吗?
谢谢。
答案 0 :(得分:1)
好的,我发现我可以在supervisord
配置中添加目录选项。添加,
directory=/home/username/go/src/appdirectory/
解决了这个问题。但是,如果还有其他更好的解决方案,我很乐意看到它们。