Что делает deliver! в Rails 3

September 28, 2011 ActionMailer premailer premailer-rails3 Resque resque_mailer Ruby Ruby on Rails Ruby on Rails 3

Потратил некоторое время на поиск неполадки в premailer-rails3 - гем, который “разворачивает” определения стилей в письмах. Наконец, нашел причину.

Собственно, мы также используем гем resque_mailer – он откладывает отправку почты в очередь Resque. Так вот, чтобы избежать отложенной отправки, я использова вместо Mail::Message#deliver метод Mail::Message#deliver!, и он отправлял почту немедленно. Что мне и нужно было.

Так вот, оказалось, что метод deliver! отправляет почту без вызова любых сторонних обработчиков – то есть, и resque_mailer-а, и premailer-rails3-а. Вот поэтому-то премейлер и не срабатывал!

Мораль: метод deliver! почти никогда не бывает полезен на практике. Можешь грепнуть его по своему проекту и раздать блеймов.

Buy Me a Coffee at ko-fi.com