2015-06-22 5 views
14

Здравствуйте,
Mailer ошибка отсутствует шаблон

У меня есть проблемы с 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 

Я искал решение на StackOverflow, и я попробовал многие ответы на аналогичной проблемой, но не к сожалению, ни один из них работал на меня.

Я нашел решение, когда я добавляю тело метода почтовой программы, как:

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

Тогда это действительно работает, но я хотел бы иметь тело в отдельных файлах и сделать его более сложным с именем пользователя и другими вещами ,

Если кто-то есть идея, как решить эту проблему, то я был бы очень благодарен :)

+2

Я нашел ту же проблему, и ваше исправление работает (хотя я все еще получаю отказ изредка сейчас). Интересно, что это происходит только в моей производственной среде. Разработка работает просто отлично. Я все еще пытаюсь понять, что происходит. –

+0

У меня тоже такая же проблема! Просто начал щедрость :-) – THpubs

+0

Используете ли вы всякий раз, когда запускаете это? Попробуйте запустить эту команду, как это: «RAILS_ENV = производственный грабли 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 %> 

Используйте предварительный просмотр, чтобы проверить вашу электронную почту на основе тестовой рамки Ework.

0

У меня была такая же проблема, моим решением было удалить файл шаблона почтовой программы, в вашем случае views/user_mailer/mailer.html.erb и создать его снова. Кажется, что я создал файл с собственным именем, но с каким-то странным белым пространством где-то, и ActionMailer не узнал его.

1

У меня была та же проблема. Перезапуск sidekiq решил это для меня.

Смежные вопросы