You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制Heroku安装R Shiny应用所需的leaflet包?

解决Heroku部署Shiny应用时leaflet包缺失的问题

问题分析

部署流程显示成功,但运行时提示leaflet包未安装,核心原因是init.R的包安装逻辑在Heroku环境中未正确执行,或是leaflet依赖的底层系统库缺失导致安装失败。

解决方案

1. 改用Heroku官方推荐的DESCRIPTION文件管理依赖

Heroku的R buildpack优先读取DESCRIPTION文件处理包依赖,比init.R的运行时安装更可靠:
创建DESCRIPTION文件放入项目根目录,内容如下:

Type: Shiny
Package: MyShinyApp
Title: My Shiny Application
Version: 0.1.0
Imports:
    dplyr,
    ggplot2,
    plotly,
    leaflet,
    readr

重新部署后,Heroku会在构建阶段自动安装所有列出的依赖包。

2. 修复init.R的包检查逻辑

原代码中installed.packages()在Heroku环境下无法准确识别用户安装的包,改用requireNamespace判断更精准:
修改init.R中的函数:

install_if_missing = function(p) {
  if (!requireNamespace(p, quietly = TRUE)) {
    install.packages(p, clean=TRUE, quiet=TRUE)
  }
}

同时确保在app.R或server.R的开头添加source("init.R"),保证应用启动时加载执行该脚本。

3. 添加leaflet所需的系统依赖

leaflet依赖部分底层系统库,Heroku默认未预装,需创建Aptfile添加系统依赖:
创建Aptfile放入项目根目录,内容:

libcurl4-openssl-dev
libssl-dev
libxml2-dev
libgdal-dev
libproj-dev

重新部署时,Heroku会先安装这些系统库,再完成R包的安装。

验证步骤

重新部署后查看Heroku构建日志,确认leaflet包及系统库均成功安装,再启动应用即可正常运行。

内容的提问来源于stack exchange,提问作者Patrick Stephenson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:13:28