尝试在生产中解决 ActionView::MissingTemplate (heroku)
Trying solve ActionView::MissingTemplate in production (heroku)
在生产环境 (heroku) 中尝试通过 gmail 发送电子邮件时,我很头疼。当 运行 heroku logs
我得到以下信息:
2016-04-15T18:20:47.117490+00:00 app[web.1]: ClienteMailer#boas_vindas: processed outbound mail in 5.8ms
2016-04-15T18:20:47.118282+00:00 app[web.1]: (0.7ms) ROLLBACK
2016-04-15T18:20:47.117474+00:00 app[web.1]:
2016-04-15T18:20:47.118705+00:00 app[web.1]: Completed 500 Internal Server Error in 31ms (ActiveRecord: 6.5ms)
2016-04-15T18:20:47.120623+00:00 app[web.1]: ActionView::MissingTemplate (Missing template layouts/mailer with {:locale=>[:"pt-BR"], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
2016-04-15T18:20:47.120613+00:00 app[web.1]:
2016-04-15T18:20:47.120624+00:00 app[web.1]: * "/app/app/views"
2016-04-15T18:20:47.120625+00:00 app[web.1]: app/mailers/cliente_mailer.rb:6:in `block (2 levels) in boas_vindas'
2016-04-15T18:20:47.120625+00:00 app[web.1]: ):
2016-04-15T18:20:47.120627+00:00 app[web.1]: app/models/cadastro.rb:6:in `envia_email_boasvindas'
2016-04-15T18:20:47.120626+00:00 app[web.1]: app/mailers/cliente_mailer.rb:5:in `boas_vindas'
2016-04-15T18:20:47.120626+00:00 app[web.1]: app/mailers/cliente_mailer.rb:6:in `block in boas_vindas'
2016-04-15T18:20:47.120627+00:00 app[web.1]: app/controllers/cadastros_controller.rb:18:in `create'
好像是模板的问题,但是邮件模板在目录layouts/mailer.html.erb
.
下面是 ActionMailer 的代码:
mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
default from: "Example <example@gmail.com>"
layout 'mailer'
end
mailers/cliente_mailer.rb
class ClienteMailer < ApplicationMailer
def boas_vindas cliente
@cliente = cliente
mail(:to => @cliente.email, :subject => 'Example.') do |format|
format.html { render 'boas_vindas' }
end
end
end
models/cadastro.rb
.
.
.
after_create :envia_email_boasvindas
def envia_email_boasvindas
ClienteMailer.boas_vindas(self).deliver
end
.
.
.
开发中一切正常。我错过或忘记了什么?
我不知道是不是这个问题,但是你不需要在邮件中指定格式。就去做吧:
class ClienteMailer < ApplicationMailer
def boas_vindas cliente
@cliente = cliente
mail(:to => @cliente.email, :subject => 'Example.')
end
end
这是我能看到的与我平时所做的唯一不同。
在生产环境 (heroku) 中尝试通过 gmail 发送电子邮件时,我很头疼。当 运行 heroku logs
我得到以下信息:
2016-04-15T18:20:47.117490+00:00 app[web.1]: ClienteMailer#boas_vindas: processed outbound mail in 5.8ms
2016-04-15T18:20:47.118282+00:00 app[web.1]: (0.7ms) ROLLBACK
2016-04-15T18:20:47.117474+00:00 app[web.1]:
2016-04-15T18:20:47.118705+00:00 app[web.1]: Completed 500 Internal Server Error in 31ms (ActiveRecord: 6.5ms)
2016-04-15T18:20:47.120623+00:00 app[web.1]: ActionView::MissingTemplate (Missing template layouts/mailer with {:locale=>[:"pt-BR"], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
2016-04-15T18:20:47.120613+00:00 app[web.1]:
2016-04-15T18:20:47.120624+00:00 app[web.1]: * "/app/app/views"
2016-04-15T18:20:47.120625+00:00 app[web.1]: app/mailers/cliente_mailer.rb:6:in `block (2 levels) in boas_vindas'
2016-04-15T18:20:47.120625+00:00 app[web.1]: ):
2016-04-15T18:20:47.120627+00:00 app[web.1]: app/models/cadastro.rb:6:in `envia_email_boasvindas'
2016-04-15T18:20:47.120626+00:00 app[web.1]: app/mailers/cliente_mailer.rb:5:in `boas_vindas'
2016-04-15T18:20:47.120626+00:00 app[web.1]: app/mailers/cliente_mailer.rb:6:in `block in boas_vindas'
2016-04-15T18:20:47.120627+00:00 app[web.1]: app/controllers/cadastros_controller.rb:18:in `create'
好像是模板的问题,但是邮件模板在目录layouts/mailer.html.erb
.
下面是 ActionMailer 的代码:
mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
default from: "Example <example@gmail.com>"
layout 'mailer'
end
mailers/cliente_mailer.rb
class ClienteMailer < ApplicationMailer
def boas_vindas cliente
@cliente = cliente
mail(:to => @cliente.email, :subject => 'Example.') do |format|
format.html { render 'boas_vindas' }
end
end
end
models/cadastro.rb
.
.
.
after_create :envia_email_boasvindas
def envia_email_boasvindas
ClienteMailer.boas_vindas(self).deliver
end
.
.
.
开发中一切正常。我错过或忘记了什么?
我不知道是不是这个问题,但是你不需要在邮件中指定格式。就去做吧:
class ClienteMailer < ApplicationMailer
def boas_vindas cliente
@cliente = cliente
mail(:to => @cliente.email, :subject => 'Example.')
end
end
这是我能看到的与我平时所做的唯一不同。