2015-06-22 15 views
14

Hallo,
Mailer Fehler fehlende Vorlage

Ich habe Problem mit Action, wenn ich versuche, Aktion auszuführen:

rake send_email 

Ich erhalte eine Fehlermeldung:

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

Hier ist mein:

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 

views/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> 

views/user_mailer/mailer.text.erb

Sample mail. 

lib/Aufgaben/E-Mails _task.rake

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

config/Umgebungen/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 

ich für die Lösung auf Stackoverflow gesucht und ich versuchte, viele Antworten für das ähnliche Problem, aber leider keiner von ihnen hat für mich gearbeitet.

Ich fand Lösung, wenn ich Körper Mailer Methode wie hinzufügen: es

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

Dann funktioniert, aber ich mag einen Körper in separaten Dateien haben, und es komplizierter mit Benutzername und anderen Dingen .

Wenn jemand eine Idee, wie dieses Problem zu lösen, dann würde ich sehr dankbar sein :)

+2

Ich habe das gleiche Problem gefunden, und Ihr Update funktioniert (obwohl ich immer noch gelegentlich einen Fehler bekomme.) Interessanterweise passiert dies nur in meiner Produktionsumgebung. Entwicklung funktioniert gut. Ich versuche immer noch herauszufinden, was vor sich geht. –

+0

Ich habe auch das gleiche Problem! Habe gerade ein Bounty angefangen :-) – THpubs

+0

Benutzt du wann immer das? Versuchen Sie, den Befehl wie folgt auszuführen 'RAILS_ENV = Produktion Rake send_email' – THpubs

Antwort

0

Könnten Sie eine minimalistische Github-Repository reproduziert Ihre Fehler veröffentlichen?

Sie können versuchen, Ihre Mailer zu erzeugen, um zu vergessen Sie nicht etwas zu überprüfen:

bundle exec rails generate mailer mailer_classname mailer_viewname

In Ihrem Fall:

bundle exec rails generate mailer user_mailer mailer

3

Versuchen Hinzufügen Layout

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

    layout "mailer" 

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

end 
1

Es ist wahrscheinlich, dass Rails gerade Ihre neu erstellten Dateien nicht findet. Wenn Sie den Edelstein spring laufen haben, könnte das das Problem sein.(Mehr auf Frühling: https://github.com/rails/spring)

Zur Einrichtung Terminal-Befehle und spring mehr ausgeführt:

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

ich das versucht, dann wieder laufen meine app mit rails s. Das hat nicht funktioniert. Versuchen Sie dann, das Terminal vollständig zu schließen und den Computer neu zu starten. Führen Sie rails s und versuchen Tests mit rails c in einem zweiten Register:

mail = UserMailer.mailer(User.last) 

Die schließlich für mich gearbeitet, hoffentlich wird es einige von euch helfen!

(Einige dieser Schritte können redundant sein.)

1

ich meine Methode umbenannt und es funktionierte. Vielleicht kann der Name der Methode keine E-Mails oder Mailer sein ...

+1

Können Sie konkret sein? Welche Methode genau? –

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

    layout "mailer" 

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

end 

ein HTML-Layout unter Layout # hinzufügen

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> 

Text hinzufügen Layout unter Layout #

mailer.text.erb

<%= yield %> 

Verwenden Sie die Vorschau, um Ihre E-Mails anhand Ihres Test-Frames zu überprüfen ewerk.

0

Ich hatte das gleiche Problem, meine Lösung war, Mailer Vorlage Datei zu löschen, in Ihrem Fall views/user_mailer/mailer.html.erb und neu zu erstellen. Es scheint, dass ich eine Datei mit dem richtigen Namen, aber mit irgendeinem seltsamen Leerraum irgendwo erstellt habe, und ActionMailer hat es nicht erkannt.

1

Ich hatte das gleiche Problem. Sidekiq neustarten hat es für mich gelöst.