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

Heroku部署带Postgres的Ruby On Rails应用时资源预编译错误

这个报错的直接原因是manifest.js中link_tree指定的目录不存在,按以下步骤排查:

  • 首先查看你的app/assets/config/manifest.js第一行的写法,默认应该是类似//= link_tree ../images、//= link_tree ../javascripts这类配置
  • 检查你本地项目app/assets/目录下,是否存在link_tree指向的对应文件夹:
    • 如果你写了link_tree ../stylesheets但本地没有app/assets/stylesheets文件夹,或者文件夹是空的,Git不会提交空目录到仓库,Heroku部署时就会找不到目录触发报错
    • 解决方案:如果是不需要的目录,直接删除manifest.js里对应的link_tree行;如果是需要用到的目录,在目录下新建一个.keep空文件,提交到Git即可让空目录被仓库追踪
  • 如果你使用了Rails 7+的importmaps/jsbundling等方案,原本的app/assets/javascripts目录被移动到了app/javascript,需要把manifest.js里对应的link_tree ../javascripts修改为link_tree ../../../app/javascript,或者直接删除该行(如果你已经用js打包工具处理前端资源,不需要sprockets再管理js文件)

附带警告问题修复(避免后续部署隐患)

1. 多buildpack警告

你当前项目根目录同时存在Ruby和Node.js的标识文件(比如package.json和Gemfile同时存在),Heroku会默认按Ruby优先处理,但如果你的项目需要先编译前端资源,建议手动指定buildpack顺序:
在本地执行命令:

heroku buildpacks:add --index 1 heroku/nodejs
heroku buildpacks:add --index 2 heroku/ruby

指定先运行Node.js buildpack打包前端资源,再运行Ruby buildpack处理Rails项目。

2. Ruby版本兼容警告

直接在项目的Gemfile里修改Ruby版本声明:

ruby "2.6.8"

重新在本地执行bundle install生成新的Gemfile.lock后提交即可,同时避免在Windows环境下生成lock文件提交,或者提交前执行bundle lock --add-platform x86_64-linux添加Linux平台适配,防止Heroku移除lock文件重新全量解析依赖。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:27:03