0


gin项目(含模板静态资源)发布踩坑备忘录

1月12号,原本是项目发版的时间,看着多少还有点不美观的页面,一直在调整样式,想不到在当晚发布的时候,好几个bug才对我动手了。。。一直跟同事检查和修复到1点才发布成功。

以下是各个坑的描述和解决方案,截图是本机演示,仅供参考~。

问题1 启动提示redis连接失败

第一次打包,把编译好的二进制直接拿去发版。没经验,以为这会是一个胖二进制,结果无论如何检查配置打包的效果都不能正确使用配置中的redis参数启动:

于是将几个配置yml附上,放在二进制同级目录下。重启应用

redis的问题解决。

问题2 模板缺失

出现了新的错误提示,如图

判断是无法访问template下的相关模板资源,通过对比源码文件夹和实际打包产物的大小,发现打包较小,估计是只能打包go代码,而配置、静态资源全部需要拷贝一份。

于是将assert资源上传。按对应文件夹放好,成功启动:

问题3 cookie不能正常获取,导致登录后无法访问首页

铺垫:首页是获取前端请求带的一个“session_id”头拿到会话数据,进一步取到该会话在登录成功时存放的一个token串来做鉴权。前端传入gin返回的有效的session_id即可访问需要权限的页面。若拿不到cookie中的sessionid数据,或无效sessionid则返回登录页,同时会写新建的sessionId值到前端。

会话id会写到前端cookie

//回写cookie
c.SetCookie(SessionCookieName, sd.GetID(), 3600, "/", "localhost", false, true)

结合 登录成功 -> 写sessionid到cookie -> 获取cookie中sessionid ->使用或新建sessionid ->首页获取cookie解析session数据 的流程,若cookie写入正常,则应该能跳转首页。

而验证时发现 ,登录成功后又跳回登录页,一直死循环,而非鉴权页面则正常访问。经排查,始终无法找到cookie:session_id的字段

在本机开发时,一直没有发现该问题,部署发版时这才重现!用我同事电脑访问我本机所部署程序,这才重现了!兴许,是cookie域的问题 ?带着这个问题继续上网求助

  1. 博客:gin设置获取cookie【设置不成功】 - Go语言中文网 - Golang中文社区

网上建议:不直接写到域:127.0.0.1和0.0.0.0

  1. 是否需要结合实际部署ip来写cookie?

带着这个思考,借鉴网上写了个工具,用于获取本机ip和请求者ip,直接写到所有可能的ip 里:


func GetLocalIP() []string {
    var ipStr []string
    netInterfaces, err := net.Interfaces()
    if err != nil {
        fmt.Println("net.Interfaces error:", err.Error())
        return ipStr
    }

    for i := 0; i < len(netInterfaces); i++ {
        if (netInterfaces[i].Flags & net.FlagUp) != 0 {
            addrs, _ := netInterfaces[i].Addrs()
            for _, address := range addrs {
                if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
                    //获取IPv6
                    /*if ipnet.IP.To16() != nil {
                        fmt.Println(ipnet.IP.String())
                        ipStr = append(ipStr, ipnet.IP.String())

                    }*/
                    //获取IPv4
                    if ipnet.IP.To4() != nil {
                        fmt.Println(ipnet.IP.String())
                        ipStr = append(ipStr, ipnet.IP.String())

                    }
                }
            }
        }
    }
    return ipStr

}

// GetRequestIP 获取ip
func GetRequestIP(c *gin.Context) string {
    reqIP := c.ClientIP()
    if reqIP == "::1" {
        reqIP = "127.0.0.1"
    }
    return reqIP
}

cookie正常写回到浏览器!可以跳转首页了!成功解决已经是凌晨1点~

码字不容易,多多少少点个赞吧^_^

标签: 前端 开发语言 go

本文转载自: https://blog.csdn.net/qq_28421553/article/details/122493660
版权归原作者 licheng_god 所有, 如有侵权,请联系我们删除。

“gin项目(含模板静态资源)发布踩坑备忘录”的评论:

还没有评论