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

Rails应用运行时出现ActionMailer模板缺失错误求助

解决Rails邮件器找不到layouts/test_mailer模板的问题

我来帮你一步步排查和解决这个邮件布局找不到的问题:

核心问题定位

你在TestMailer里设置了layout 'test_mailer',按照Rails的约定,它会去**app/views/layouts/目录下**寻找名为test_mailer.html.erb的布局文件(对应你发送的HTML格式邮件)。从错误信息来看,这个关键文件并不存在于搜索路径中,所以才会抛出模板缺失的报错。

具体解决方案

方法1:创建全局自定义邮件布局

这是最贴合你当前代码设置的方案:

  1. 在项目中新建app/views/layouts/test_mailer.html.erb文件,填入基础的邮件布局结构:
<!DOCTYPE html>
<html>
<head>
  <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
  <!-- 这里的<%= yield %>会自动渲染邮件的具体内容(比如mail_notification.html.erb里的内容) -->
  <%= yield %>
</body>
</html>
  1. 保持TestMailer里的layout 'test_mailer'配置不变,Rails就能正确识别并加载这个布局。

方法2:使用邮件器专属布局

如果你想把布局和该邮件器的视图文件放在同一目录下,可以这样调整:

  1. 在app/views/test_mailer/目录下创建layout.html.erb文件,内容同上。
  2. 修改TestMailer的布局配置,指向这个专属布局:
class TestMailer < ActionMailer::Base
  default from: 'test@gmail.com'
  # 指定使用当前邮件器目录下的layout文件
  layout 'test_mailer/layout'

  def mail_notification(user, filename)
    @user = user
    @filename = filename
    mail( to: user.email, subject: "Testing Mail" )
  end
end

额外需要注意的点

  • 文件名大小写:Linux系统下文件名是大小写敏感的,确保布局文件名和代码里指定的完全一致(比如不能把test_mailer.html.erb写成TestMailer.html.erb)。
  • 重启Resque进程:因为你是通过Resque后台触发邮件发送,修改视图或布局后必须重启Resque,否则后台进程不会加载新的文件。
  • 多格式支持:如果你的邮件需要同时支持HTML和纯文本格式,需要分别创建test_mailer.html.erb和test_mailer.text.erb两个布局文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:35:56