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

标签 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 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/

相关文章:

python - PYTHONOPTIMIZE 在 python 解释器中做什么?

mysql - Docker容器运行supervisor过早关闭

google-app-engine - 从 google go 中重命名的类型进行转换

go - 是否有一个包可以在 golang 中编码进出 x-www-form-urlencoded

go - 如何在 Go 中实现只使用 atomic 的 "i++ and i>=max ? 0: i"

django - 无法执行 gunicorn_start EACCES

php - Laravel Queue with Supervisor,运行但不处理作业

python - Django Celery队列卡住了

go - 谁能帮我解决这个 GoLand 终端错误

go - new-ed 结构的返回类型是什么?