我在运行ruby应用程序时遇到错误。
18:46:35 resque.1 | Missing template layouts/test_mailer with
{:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb,
:html, :builder, :ruby]}. Searched in:
18:46:35 resque.1 | * "/home/administrator/<PROJECT_PATH>/app/views"
18:46:35 resque.1 | * "/home/administrator/.rvm/gems/ruby2.4.1/gems/devise_token_auth-0.1.39/app/views"
18:46:35 resque.1 | * "/home/administrator/.rvm/gems/ruby-2.4.1/gems/devise-4.2.0/app/views
在Rails中具有Angular和后端的单独UI的应用程序。 我正在使用邮件程序向用户发送邮件。
我发现了一个类似的问题,但我猜它仍然不符合我的要求。 Link 我已经在mailers文件夹中创建了test_mailer.rb,并且还在views文件夹下使用了特定于test_mailer.rb的布局。
我仍然遇到上述错误。
更多信息:
寄件人/ test_mailer.rb
class TestMailer < ActionMailer::Base
default from: 'test@gmail.com'
layout 'test_mailer'
def mail_notification(user, filename)
@user = user
@filename = filename
mail(
to: user.email,
subject: "Testing Mail"
)
end
end
视图/ test_mailer / mail_notification.html.erb
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<Mail_Text>
</body>
</html>
答案 0 :(得分:1)
错误是缺少邮寄的布局。
Missing template layouts/test_mailer with
{:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb,
:html, :builder, :ruby]}
mailers/test_mailer.rb
的第三行声明layout 'test_mailer
它在test_mailer.html.erb
文件夹中查找views/layout
。您必须使用简单的HTML Body创建此文件,如:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
/* Email styles need to be inline */
</style>
</head>
<body>
<%= yield %>
</body>
</html>
现在mail_notification.html.erb
只保留电子邮件内容并删除html正文,它将从布局文件中获取。
<强>更新强>:
您可能会感到困惑,因为您的布局名称和邮件程序类是相同的。只是为了理解您可以将邮件程序布局名称重命名为mailer_layout
:
即:
class TestMailer < ActionMailer::Base
default from: 'test@gmail.com'
layout 'mailer_layout'
def mail_notification
...
end
end
现在您需要以下观点:
应用程序/视图/布局/ mailer_layout.html.erb
应用程序/视图/ test_mailer / mail_notification.html.erb