更新Shiny应用manifest.json时writeManifest()报错原因排查
错误触发原因
报错直接由系统/tmp临时分区剩余空间耗尽导致,和rsconnect包本身、manifest生成逻辑无关联。
rsconnect::writeManifest()执行逻辑中,会先把当前Shiny应用目录下的所有文件(含子目录内的.rds数据、静态资源等)复制到R生成的临时工作目录(即报错路径里/tmp/RtmpXXXX/格式的临时文件夹),完成全量依赖扫描后才会输出最终的manifest.json。- 此前能正常运行,是因为当时/tmp分区剩余空间足够容纳应用全量文件;当前分区空间写满后,复制大体积.rds文件时就会触发
No space left on device写入错误,后续连锁触发无法打开连接、文件追加失败的上层报错。
空间耗尽的常见诱因
- R临时文件残留:异常中断的部署任务、崩溃退出的R会话,会在/tmp下遗留完整的Rtmp临时目录,长期堆积占满空间
- 近期应用目录新增大体积文件:报错中提到的
dom.rds、rt.rds、list_rt.rds等数据文件,总体积超出/tmp分区当前剩余容量 - 系统其他进程生成的临时文件占满/tmp分区,和R操作无关
解决方式
- 退出所有运行中的R会话,手动删除/tmp路径下老旧的
Rtmp*格式目录释放空间 - 若应用目录下存在不需要打包部署的大文件(如测试原始数据、临时备份),在应用根目录新建
.rscignore文件,写入要排除的目录/文件名,避免命令执行时复制无关文件占用临时空间 - 若/tmp分区本身容量过小,启动R前配置
TMPDIR环境变量,指向剩余空间充足的自定义路径,让R将临时文件写入该路径规避空间限制
内容的提问来源于stack exchange,提问作者JoGG
相关产品推荐
相关产品推荐

