V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
imherer
V2EX  ›  Go 编程语言

有用过 golang 的 packr 这个包吗?请教几个问题

  •  
  •   imherer · 2019-08-20 15:28:31 +08:00 · 3014 次点击
    这是一个创建于 1704 天前的主题,其中的信息可能已经有所发展或是发生改变。

    github 链接:github.com/gobuffalo/packr/tree/master/v2

    我想用它把前端文件打包的 go 的 binary 文件里

    参照官方文档的步骤,打包成功了,binary 也变大了许多,从文件大小上看应该是把前端文件给打进去了,但是我把前端文件删掉之后,访问就 404 了

    难道还得保留前端文件吗?那这样的话打包还有什么意义呢?

    Usage with HTTP:github.com/gobuffalo/packr/tree/master/v2#usage-with-http

    15 条回复    2020-06-10 23:12:39 +08:00
    AngryPanda
        1
    AngryPanda  
       2019-08-20 15:31:49 +08:00
    打包进去了,但是我估计你用的地方 PATH 也许需要改。。。
    imherer
        2
    imherer  
    OP
       2019-08-20 15:47:50 +08:00
    @AngryPanda
    我打包之后,先保留前端文件,运行正常。 当我把前端文件删了或者把文件夹改个名字就 404 了
    ChristopherWu
        3
    ChristopherWu  
       2019-08-20 15:48:35 +08:00
    其实为什么有把 static file 怼进去二进制文件里的需求?
    AngryPanda
        4
    AngryPanda  
       2019-08-20 15:53:20 +08:00
    @ChristopherWu 方便部署吧
    leoleoasd
        5
    leoleoasd  
       2019-08-20 15:56:26 +08:00
    @ChristopherWu #3 这样子的话就只需要部署一个二进制程序到服务器,不需要整个文件夹都过去了
    xfriday
        6
    xfriday  
       2019-08-20 15:58:45 +08:00
    打成 docker 镜像吧
    imherer
        7
    imherer  
    OP
       2019-08-20 16:08:23 +08:00
    @ChristopherWu 对的。方便部署是一方面。 假如前后端分离的项目,前端要用 nginx 代理一个,后端也要用 Nginx 代理一下, 有点费事。


    @xfriday 就这一个,而且还是交给客户部署。打成 docker,还得教他们用 docker....
    ChristopherWu
        8
    ChristopherWu  
       2019-08-20 16:13:17 +08:00
    @imherer
    @AngryPanda

    那这样子你也可以把图片也跟 binary 一起给过去呀。文件夹跟文件,没什么区别啊。
    lanjz
        9
    lanjz  
       2019-08-20 16:20:30 +08:00
    如果操作没错的话应该不会有你说的删除就 404 的。

    你是不是删除文件后又重新编译了一次然后再运行的?或者是直接 go run 执行?
    imherer
        10
    imherer  
    OP
       2019-08-20 16:30:10 +08:00
    @lanjz 没有的,我的步骤是 先 packr 然后 go build 出 binary 文件
    然后运行这个 binary 文件,正常。 这时候删掉前端文件就 404 了
    lanjz
        11
    lanjz  
       2019-08-20 16:36:33 +08:00
    @imherer #10 直接 packr build 不用再 go build 了

    等于说你直接把 packr 命令用来替换掉原来的 go 命令,参数不变
    imherer
        12
    imherer  
    OP
       2019-08-20 16:48:23 +08:00
    @lanjz 我试了下,直接 packr build 之后还是同样的问题。binary 文件大了许多,但是删掉前端文件夹后还是 404 了

    我后端框架用的是 gin
    代码是这样的:
    box := packr.NewBox("./templates")
    r.Any("/", gin.WrapH( http.FileServer(box)))
    // api router
    routers.Setup(r)
    mritd
        13
    mritd  
       2019-08-20 18:51:42 +08:00 via iPhone
    肯定是你的相对路径配置问题,或者没有执行编译转换
    imherer
        14
    imherer  
    OP
       2019-08-20 19:14:43 +08:00
    @mritd 问题解决了

    之前没仔细看用的是 v1 的版本,换成 v2 后就可以了。 不过 v2 有个 bug 是:too many redirects。 该了修改了源代码里一个地方,目前正常了
    ecareyu
        15
    ecareyu  
       2020-06-10 23:12:39 +08:00
    有一个外包项目,甲方有加密软件包的需求,所以需要打成一个 exe 文件,然后通过序列号打开应用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2717 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:32 · PVG 13:32 · LAX 22:32 · JFK 01:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.