ActionMailer - медленное обновление страницы после отправки сообщения


Есть два способа, как уменьшить задержку обновления страницы сайта, после нажатия на кнопку "отправить сообщение". Первый - настроить на сервере, где находится сайт, почтовый сервер, через который будут отправляться почта. Второй - использовать асинхронную отправку сообщений, чем сейчас и займемся.
Самый простой способ реализации асинхронной отправки почты - использование плагина delayed_job. Добавляем в Gemfile: 
gem 'delayed_job_active_record'
и выполняем из директории проекта:
bundle install
rails g delayed_job:active_record
rake db:migrate
 
Открываем контроллер и изменяем:
AdminMailer.alert_message().deliver
на
AdminMailer.delay.alert_message()
Осталось только выполнить в консоли:
rake jobs:work
Теперь обновление страницы будет происходит практически мгновенно, а в консоли можно будет отслеживать состояние отложенных заданий. 

Комментарии

Популярные сообщения из этого блога

Конвертируем Ruby-приложение в exe

JQuery и Rails - делаем кнопку "like it" со счетчиком

Резервное копирование базы данных по расписанию