统计之都主站是托管在 Netlify 上的,有的文章中含有大量 JS 文件,涉及一些交互式图表,为了能让主库体积小一些,我们用 PR 时产生的指向 JS 文件的预览链接代替上传 JS 文件。 但是,最近,发现 Netlify 不支持了,预览链接失效了。结果是一些旧文章的交互式图表不展示了,比如

以及我个人博客中的一些文章。不过话说回来,用 Netlify PR 生成的临时链接来替代存储是个非官方办法,现在人家不让用了,我们只能认了。大家有什么解决办法吗?

    Netlify 的同类产品有 Vercel 和 Cloudflare Pages(无限流量),不知道能不能解决这个问题。

      CyrusYip 无限流量

      应该也是暂时的,Netlify 用的人多了,现在加限制了。

      一些公共的库都有自己的cdn

      Cloud2016 确实是前段时间 Netlify 决定不再永久支持 Github PR 生成的预览页面了。我建议用 jsdelivr:https://www.jsdelivr.com/github 它很牛的地方在于首先墙内可访问(这一点太不容易了),其次即使 Github 上的文件后来删掉了,它的链接依然不会失效,因为它会把历史文件缓存下来。

      现在这个问题只能如此这般解决:首先建一个分支,把这几篇文章重新生成一遍,然后把链接换成 jsdelivr 的链接,并访问一次这些文章页面(好让 jsdelivr 保存缓存),再把分支中的文件删掉,最后合并分支。

        yihui 我想了想,纠结了一番,还是想本地编译后,直接上传所有文件,Rmd 投稿文章不会太多。替换也麻烦,除了现在的替换成本,主站端编辑还得会这操作,有学习成本,本来 blogdown 用的人不多(得装 R,最好把 RStudio 也装上),不要吓跑了人家了,能少一步就少一步。未来不知道这么好的政策会不会变,一般来说,好政策前期都是吸引顾客,种草养鱼必然收割打捞。

          6 天 后

          yihui 把这几篇文章重新生成一遍,然后把链接换成 jsdelivr 的链接

          可能是我理解不对,还是不知道怎么替换链接。目前,我将每篇文章编译之后,上传到 PR 重新编译含交互图表的文章 可以获得 Netlify 给的预览链接,用到的 JS 库,也有 Netlify 链接。现在的问题是怎么替换这些 JS 库对应的 Netlify 链接?

          tctcab 你知道怎么操作吗?

          CyrusYip 主要是维护这么多依赖有点麻烦,我在维护我的书籍环境的时候,累,软件版本依赖和升级的问题一大堆。我想一劳永逸,文章一旦合并就不要再管了,它也不会和未来的其它文章有软件依赖关系,各篇文章运行环境一定是独立的。关于软件工具介绍的文章,即使内容过时也不在原地方更新。

            Cloud2016 主要是维护这么多依赖有点麻烦,我在维护我的书籍环境的时候,累,软件版本依赖和升级的问题一大堆。我想一劳永逸,文章一旦合并就不要再管了,它也不会和未来的其它文章有软件依赖关系,各篇文章运行环境一定是独立的。关于软件工具介绍的文章,即使内容过时也不在原地方更新。

            我最近在学Nix,用 Nix 可能解决你的问题。它主打reproducible 和 declarative。reproducible就是输入一样(安装啥软件),输出就一样一样(构建出来的软件)。declarative 就是用文件定义需要构建啥软件。

            也就是说用文件定义好需要安装的软件和版本,构建成功的话,你以后用那个配置文件就一定会构建出一样的软件。为了保证reproducible ,你要用 flakes 功能。

            举个例子,假如你用这几个 nix 文件,你在你的电脑可以构建出和我一样版本的软件。解决了「It works on my machine」的问题(不过我没放 local.nix,真拿来用应该会失败)。

            我夸得可能不是很好,这本书夸得比较好: https://nixos.org/guides/nix-pills/index.html

            看你挺推荐 docker,你应该对这个视频感兴趣。

            Matthew Croughan - Use flake.nix, not Dockerfile - MCH2022

              CyrusYip 老实讲,我你说的这几个工具,我都第一次听,可能需要较多的学习成本,只能先收藏一下了。不知道 @yihui 是否有了解?

                我突然想起来个人,Paul Murrell 他的技术报告,每篇文章都是独立的,基于 Docker 每次都会整一个仓库,把相关内容都放进去。

                我突然想起来还有个问题没说清楚,就是用 jsdelivr 链接,应该是从作者的仓库引过去,比如文章用到 echarts4r 包,那么得从 echarts4r 包的仓库,把 JS 文件找到,并引过去,而不是 apache echarts 的官网,因为 R 包作者对 JS 有修改。

                Cloud2016 可能是我理解不对,还是不知道怎么替换链接。

                如此替换:先建一个分支,在里面正常编译 Rmd,然后用 https://cdn.jsdelivr.net/gh/cosname/cosx.org@分支/文件路径 获取资源(如 JS),这就是你要替换的链接。前面我说了 jsdelivr 会永久缓存这些文件,所以事后你可以删掉分支。

                Cloud2016 嗯,就先这么办吧。谢谢。

                Cloud2016 我不了解。