2015-06-22 154 views
14

你好,
梅勒错误缺少模板

我有问题,的ActionMailer,当我尝试执行操作:

rake send_email 

我得到一个错误:

rake aborted! 
ActionView::MissingTemplate: Missing template user_mailer/mailer with "mailer". Searched in: 
    * "user_mailer" 

这是我的:

寄件人/ user_mailer.rb

class UserMailer < ActionMailer::Base 
    default from: "[email protected]" 

    def mailer(user) 
    @user = user 
    mail(to: @user.email, subject: 'Test') 
    end 

end 

视图/ user_mailer文件/ mailer.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> 
    </head> 
    <body> 
    <p> 
     Sample mail. 
    </p> 
    </body> 
</html> 

视图/ user_mailer文件/ mailer.text.erb

Sample mail. 

lib/tasks/emails _task.rake

desc 'send email' 
task send_email: :environment do 
    UserMailer.mailer(User.last).deliver! 
end 

配置/环境/ development.rb

# I recommend using this line to show error 
    config.action_mailer.raise_delivery_errors = true 

    # ActionMailer Config 
    config.action_mailer.delivery_method = :letter_opener 

# config.action_mailer.default_url_options = { :host => 'localhost:3000' } 
# config.action_mailer.delivery_method = :smtp 
# SMTP settings for gmail 
config.action_mailer.smtp_settings = { 
:address    => "smtp.gmail.com", 
:port     => 587, 
:user_name   => ENV['gmail_username'], 
:password    => ENV['gmail_password'], 
:authentication  => "plain", 
:enable_starttls_auto => true 
} 

# Send email in development mode? 
config.action_mailer.perform_deliveries = true 

我搜索计算器上的解决方案,我尝试了许多问题的答案对于类似的问题,但不幸的是他们没有为我工作。

我找到了解决办法,当我补充身体到邮件的方法,如:

def mailer(user) 
    @user = user 
    mail(to: @user.email, subject: 'Test', body: 'something') 
end 

然后,它的工作,但我想有单独的文件体,使其与用户名和其他事情更复杂。

如果有人有一个想法如何解决这个问题,那么我会非常感激:)

+2

我发现了同样的问题,并且您的修复工作正常(尽管我现在仍然偶尔会出现故障。)有趣的是,这只发生在我的生产环境中。开发工作得很好。我仍在试图弄清楚发生了什么事。 –

+0

我也有同样的问题!刚刚开始赏金:-) – THpubs

+0

你用什么来运行这个?尝试像这样运行命令'RAILS_ENV = production rake send_email' – THpubs

回答

0

你可以发布一个最低限度的Github上库重现你的错误?

您可以尝试生成您的邮件,以检查你是不是忘了什么东西:

bundle exec rails generate mailer mailer_classname mailer_viewname

你的情况:

bundle exec rails generate mailer user_mailer mailer

3

尝试增加布局

class UserMailer < ActionMailer::Base 
    default from: "[email protected]" 

    layout "mailer" 

    def mailer(user) 
    @user = user 
    mail(to: @user.email, subject: 'Test') 
end 

end 
1

这是很可能Rails只是没有找到你新创建的文件。如果你有spring宝石运行,那可能是问题。(更多关于春:https://github.com/rails/spring

要设置终端的命令和停止运行spring

$ bundle exec spring binstub --all 
$ bin/spring stop 

我想这一点,然后重新运行与rails s我的应用程序。这不起作用,然后尝试彻底关闭终端并重新启动计算机。运行rails s,并在第二个选项卡尝试测试与rails c

mail = UserMailer.mailer(User.last) 

最后为我工作,希望它会帮助你们中的一些!

(其中一些步骤可能是多余的。)

1

我重命名了我的方法,它工作正常。也许该方法的名称不能是电子邮件或邮寄...

+1

你能具体吗?什么方法? –

2
class UserMailer < ActionMailer::Base 
    default from: "[email protected]" 

    layout "mailer" 

    def mailer(user) 
    @user = user 
    mail(to: @user.email, subject: 'Test') 
end 

end 

下布局#添加HTML布局

mailer.html.erb

<!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> 

下布局#添加文本布局

mailer.text.erb

<%= yield %> 

使用预览检查您的电子邮件根据您的测试fram ework。

0

我有同样的问题,我的解决方案是删除邮件模板文件,在您的情况下views/user_mailer/mailer.html.erb并再次创建它。 似乎我创建了一个名字正确的文件,但在某处存在一些奇怪的空白,ActionMailer没有识别它。

1

我有同样的问题。重新启动sidekiq为我解决它。