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

Rails开发环境下无法正常渲染public目录下ERB格式404模板的问题

问题根因

  • 你直接用render :file指向public目录下的ERB文件不符合Rails的模板处理约定:public目录默认用于存放静态资源,Rails不会主动将该目录下的文件作为动态模板解析。
  • 开发环境默认开启了静态文件服务调试逻辑,未明确指定响应内容类型时,会将.erb后缀的文件识别为纯文本,自动包裹<pre>标签返回原始内容,方便开发者调试静态文件。
  • 生产环境默认关闭了Rails层面的静态文件服务,该渲染逻辑不会触发静态文件处理流程,会直接读取文件内容返回,所以不会出现<pre>包裹的问题。

解决方案

方案1(推荐,符合Rails约定)

将404.html.erb移动到app/views/errors/目录下,修改渲染逻辑为指定模板渲染即可,ERB语法会被正常解析,实例变量@fail_photo也可以正常传入模板使用:

render({
  template: 'errors/404',
  layout: false,
  status: :not_found
})

该方案开发、生产环境表现一致,无需额外适配配置。

方案2(保留文件存放在public目录)

如果出于特殊需求必须把文件放在public目录下,渲染时明确指定ERB解析器和HTML内容类型即可:

render({
  file: Rails.root.join("public", "404.html.erb"),
  layout: false,
  status: :not_found,
  handlers: [:erb], # 强制使用ERB解析文件
  content_type: 'text/html' # 明确返回内容为HTML,避免被识别为纯文本
})

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

相关产品推荐
方舟 Agent Plan

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

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