• R语言已解决
  • 编译大型 R Markdown 格式文档会导致 Hugo / blogdown 网站无响应

Cloud2016 装 processx 包了吗?

另外,可以用 ps -A | grep hugo 看看 hugo 是不是真的挂了。

我也不知道为什么会这样。如果最终查不出原因,也许可以试着缓存一下那些慢的代码段。

    yihui 缓存可以有些缓解。processx 包也装了,版本是 3.7.0 。
    没有用 RStudio IDE,在 R控制台运行 blogdown:::serve_site() 后,在 RMarkdown 文档里增加一个空行,等待编译完成,编译前后用 ps -A | grep hugo 看了后,确认是挂了。

    可见 Hugo 挂了后,顺带拖垮了 RStudio IDE。

    我把 library(sf) 都去掉避免直接加载 sf,使用 Google R style guide 中的 qualifying namespaces 风格,把每个 sf 函数都加上显式的命名空间 sf:: 来调用,好像解决了问题。至少在我的机器上 (M2 Air) 没有再出现 Hugo 失联的情况了。(重启 RStudio 5 次,每次编辑保存预览 10 次)

    想到这点是因为每次重新渲染都会出现

    Linking to GEOS 3.10.2, GDAL 3.4.2, PROJ 8.2.1; sf_use_s2() is TRUE

    所以猜测可能是显式加载 sf 引入的某些二进制库会产生了某种 race condition。

      nan.xiao 有点奇怪,通过命名空间导入的方式,即不直接加载 sf 包,每个 sf 相关的函数前加上 sf:: 我理解本质还是会调用 GEOS/GDAL/PROJ 三大外部库去实现函数功能,对 sf 来说,就是 sf 包下 libs 目录下的 sf.sosf.so.dSYM 动态链接库。我从 CRAN 下载的是编译打包好的 sf 包,而不是从源码编译的。 我基本不了解 C++ 所以想请问 race condition 是什么意思?

      另外,我的 Mac 是 2019 版的 Intel CPU,会和这个硬件有关系吗?因为我全部替换为从命名空间导入的方式还是不行,问题依旧。

      nan.xiao 另外,在你的系统上,不替换也会出现类似问题吗?而替换后就都好了?

      @Cloud2016 又测试了几次,这次无论如何也无法复现原来的问题了。 😂 而之前确实是可以复现的,改成了 sf:: 以后就解决了。也许问题的根源并不在这里,我只是偶然触发了能恰好解决问题的条件。

      race condition 大概就是说在一个并发的环境中执行某些事情的顺序和时机不对会引起问题。

      Anyways, 推荐找一台 ARM 架构的 Mac 或者 PC 的环境试验一下。

      另外,我的 Hugo 是通过 Homebrew 安装的最新版本 0.104.1, RStudio Desktop 2022.07.2 Build 576。

        nan.xiao 我也将 Hugo 升级到 0.104.1 试试看,Hugo 从 0.101 到 0.104.1 改动还挺多的。

        @yihui 我把 Hugo 升级到 0.104.1 之后,情况有改善,就是 Hugo 没有挂掉。改动 R Markdown 文档,等待编译完成后,网站页面显示,刷新什么的都不管用。

        RStudio IDE 测试环境换成了最新稳定版和 nan.xiao 保持一致。我的 Hugo 也是从 Homebrew 安装的。

        RStudio 2022.07.2+576 "Spotted Wakerobin" Release (e7373ef832b49b2a9b88162cfe7eac5f22c40b34, 2022-09-06) for macOS
        Mozilla/5.0 (Macintosh; Intel Mac OS X 12_6_0) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.12.10 Chrome/69.0.3497.128 Safari/537.36

          Cloud2016 这我又不懂了。我刚把 .gitkeep 文件删了,你看看是否有任何改进。

          我有另一个更本质的修正办法,就是重新编译 Rmd 之前把 hugo 进程暂停。在更早期的 blogdown 版本中我是这么做的,我现在想不起来为什么后来我把它移除了,我得再看一下这部分的历史修改记录。

            yihui 编译后,点击网站其它地方或刷新页面, chtimes 的问题变成了

            open /BingSiteAuth.xml: read-only file system 

            网站还是挂了的

              yihui 我虽然不清楚里面的原理,但是发现问题解决了。逻辑也比较清晰,在编译 Rmd 的时候, Hugo 在旁边看着,不要动,等编译完了后,Hugo 再上手。

                Cloud2016 逻辑正是如此。Hugo 的侦听频率可能太高了,R 仍然在大量修改文件时,它过快做出了反应,所以我得让暂停这个进程,等 R 编完了再恢复它。