flexdashboard编译失败:SSL/TLS连接错误,需明确下载资源
解决防火墙环境下flexdashboard编译的SSL握手失败问题
问题根源
你的flexdashboard配置中指定了Google字体(Prompt和JetBrains Mono),编译时flexdashboard会自动尝试从Google Fonts服务器下载这些字体的资源文件(包括字体样式CSS和字体文件)。由于防火墙环境屏蔽了外部资源访问,导致curl请求SSL握手失败,触发报错。
flexdashboard尝试获取的资源
具体涉及的资源是:
- Google Fonts提供的Prompt字体样式文件及对应字体文件
- Google Fonts提供的JetBrains Mono字体样式文件及对应字体文件
这些资源的请求路径均指向Google的外部服务器,无法在你的受限环境中直接访问。
解决方案
方案1:改用本地/CRAN可访问的字体
放弃Google字体,替换为系统已安装的字体或可通过CRAN安装的字体包(如extrafont)提供的字体:
- 修改YAML配置中的字体设置,替换为系统字体名称:
output: flexdashboard::flex_dashboard: theme: bg: "#101010" fg: "#FDF7F7" primary: "#ED79F9" base_font: "Arial" # 替换为系统已有的字体 code_font: "Courier New" # 替换为系统已有的等宽字体 orientation: columns vertical_layout: fill - 若需更多字体选项,可安装
extrafont包导入系统字体:
之后可以用install.packages("extrafont") library(extrafont) font_import() # 导入系统字体 loadfonts() # 加载字体fonts()查看可用字体名称,替换到YAML配置中。
方案2:手动下载字体并本地引用
若必须使用指定的Google字体,可手动下载后本地引用:
- 从可访问的渠道下载Prompt和JetBrains Mono字体的TTF/OTF文件,将文件放到项目目录下的
fonts文件夹中 - 在Rmd文件开头添加自定义CSS块,声明本地字体:
```{css, echo=FALSE} @font-face { font-family: 'Prompt'; src: url('fonts/Prompt-Regular.ttf') format('truetype'); font-weight: normal; font-style: normal; } @font-face { font-family: 'JetBrains Mono'; src: url('fonts/JetBrainsMono-Regular.ttf') format('truetype'); font-weight: normal; font-style: normal; } - 修改YAML配置中的字体设置为本地字体名称:
base_font: "Prompt" code_font: "JetBrains Mono"
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

