Связано с this question, в котором объясняется происхождение логики в контроллере, у меня есть вопрос о фоновых заданиях с Delayed Job, прежде чем нажимать его на github и повторно развертывать.Является ли это ожидаемым поведением для Delayed Job, Rails и Mandrill?
Модели и телескопы работа, логика в контроллере (ы) работает, то условные в электронной почте text.erb файлов работают, пользователи либо читатели или подписчики и могут установить их по электронной почте на предпочтения их страница «Моя учетная запись»: [Статьи & Обновления, только статьи, нет электронной почты и т. д.]. Задержанное задание настроено и обрабатывает все это в фоновом режиме, делая фронт хорошо и быстро, как всегда, и Mandrill SMTP получает все правильно и быстро отправляет электронные письма.
Основной логический блок в article_controller делает это, чтобы послать правильные электронные письма нужных пользователей:
if @article.update(article_params) && @article.status == 'published' && @article.created_at.today?
User.wantsarticles.editor.each do |user|
ArticleMailer.delay.send_article_full(@article, user)
end
User.wantsarticles.subscribers.each do |user|
ArticleMailer.delay.send_article_full(@article, user)
end
User.wantsarticles.readers.each do |user|
ArticleMailer.delay.send_article_teaser(@article, user)
end
format.html { redirect_to :action => 'admin', notice: 'Article was successfully updated.' }
format.json { render :show, status: :ok, location: @article }
else
format.html { redirect_to :action => 'admin', notice: 'Article was successfully updated.' }
format.json { render :show, status: :ok, location: @article }
end
Глядя на журналы Rails и отложенной Работа, хотя, с тестовым набором только несколько пользователей (5-10), когда он циклически проходит логику и решает, что нужно отправить три письма, Rails делает три INSERT INTO таблицы DJ, а DJ делает это для каждого из них:
Job NewsitemMailer.send_article_full (id=21) RUNNING
Job NewsitemMailer.send_article_full (id=21) COMPLETED after 0.8950
И затем, когда он закончит, i т сообщает назад с:
3 jobs processed at 0.9039 j/s, 0 failed
И в журналах Mandrill, каждый электронной почты, отправляемой получает свой собственный API «/ не успех» входа.
Итак: это правильное/ожидаемое поведение для Задержанного задания? Должна ли быть создана одна работа для каждого электронного письма? Или обрабатывать их по-другому? Является ли этот способ делать вещи, чтобы сломать сервер, когда мы начинаем делать X тысяч вместо десяти/трех?
Спасибо KM! Да, это просто простой набор для начала, чтобы все было в порядке и узнать, как это работает. И мы посмотрим, что он делает с сервером. Мы обязательно рассмотрим другие варианты, которые вы упомянули чуть позже. –