Rails资源预编译后Heroku Slug体积暴涨,如何缩减vendor目录?
缩减Heroku Slug中vendor目录体积的解决方案
首先定位vendor目录内的空间占用细节,运行以下命令找出最占空间的子目录/文件:
du -ha --max-depth 2 /app/vendor | sort -hr
根据定位结果,执行以下针对性操作:
清理Gem冗余文件
Ruby项目的vendor/bundle中,多数gem会附带文档、测试用例、示例文件,这些完全可以删除:# 删除所有gem的文档目录 rm -rf /app/vendor/bundle/ruby/*/gems/*/doc # 删除测试相关目录 rm -rf /app/vendor/bundle/ruby/*/gems/*/{test,spec,example,examples}同时确保Heroku只安装生产环境依赖,构建时使用
bundle install --without development test(Heroku默认会自动处理,但手动指定可避免缓存残留)。排查误打包的非必要文件
检查vendor目录中是否存在:node_modules目录(若前端依赖被误拷贝到此处,应移至项目根目录并通过.slugignore排除)- 备份文件、日志文件、临时编译产物
- 第三方工具的完整安装包(而非仅运行所需文件)
找到后直接删除这些冗余内容。
移除未使用的Gem
检查Gemfile.lock,找出项目中实际未调用的gem,从Gemfile中移除后重新执行bundle install,减少不必要的依赖体积。清理构建临时文件
在Heroku的构建流程中添加post-build清理步骤,比如在构建脚本中加入:# 清理webpack编译缓存或其他临时文件 rm -rf /app/vendor/tmp检查大体积二进制Gem
若发现某个二进制gem(如数据库驱动、图像处理库)占用过大空间,可尝试:- 使用轻量替代方案(比如用
mini_magick替代完整的rmagick) - 确认安装的是针对Heroku环境的预编译版本,避免本地编译产生冗余文件
- 使用轻量替代方案(比如用
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

