编译大型 R Markdown 格式文档会导致 Hugo / blogdown 网站无响应
我把 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.so
和 sf.so.dSYM
动态链接库。我从 CRAN 下载的是编译打包好的 sf 包,而不是从源码编译的。 我基本不了解 C++ 所以想请问 race condition 是什么意思?
另外,我的 Mac 是 2019 版的 Intel CPU,会和这个硬件有关系吗?因为我全部替换为从命名空间导入的方式还是不行,问题依旧。
- 已编辑
@Cloud2016 又测试了几次,这次无论如何也无法复现原来的问题了。 而之前确实是可以复现的,改成了
sf::
以后就解决了。也许问题的根源并不在这里,我只是偶然触发了能恰好解决问题的条件。
race condition 大概就是说在一个并发的环境中执行某些事情的顺序和时机不对会引起问题。
Anyways, 推荐找一台 ARM 架构的 Mac 或者 PC 的环境试验一下。
另外,我的 Hugo 是通过 Homebrew 安装的最新版本 0.104.1, RStudio Desktop 2022.07.2 Build 576。
- 已编辑
@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 关于这个 chtimes
的错误,设置 hugo 的 --noTimes
选项也许会管用。试试看吧。
yihui 设置之后,能看到博客文章页面,不过一旦点击网站的其它地方,就还是显示网站挂了。
经过确认 Hugo 确实是挂了。在编译的过程中出现了不止 chtimes 一个问题,有很多问题,我讲不清楚,所以我录了视频,约 1 分钟。
Cloud2016 这我又不懂了。我刚把 .gitkeep 文件删了,你看看是否有任何改进。
我有另一个更本质的修正办法,就是重新编译 Rmd 之前把 hugo 进程暂停。在更早期的 blogdown 版本中我是这么做的,我现在想不起来为什么后来我把它移除了,我得再看一下这部分的历史修改记录。