Я работаю над приложением Rails, которое отправляет письма в фоновом режиме с помощью Sidekiq и Mandrill. В моем приложении у меня есть две очереди, одна для взаимодействия с моей службой (нерелевантная), а вторая - очередь почтовых сообщений. Очередь почтовой рассылки используется двумя почтовыми программами: один для управления профилем пользователя, а другой - для взаимодействия с нашим сервисом (не имеет значения).Задание Sidekiq запланировано, не работает и просто исчезает
Сегодня я заметил, что пользователи не получают электронные письма в течение нескольких дней, кроме письма с подтверждением, которое отправляется Devise.
Другая очередь работает безупречно и не имеет проблем. (Поэтому, возможно, конфигурация Sidekiq не проблема).
Например позволяет принимать UserMailer, который уведомляет пользователя об успешном обновлении профиля:
user_mailer.rb
def update_user(user)
@user = user
mail(:to => user.email)
end
user_profile_controller.rb
def update_resource(user)
user.save
UserMailer.update_user(user).deliver_later(wait: 1.minute)
end
Когда я попытался тестирования эта функция с deliver_now вместо deliver_later, она работала, и почта была отправлена (так что соединение с Мандрилл работает). Когда я тестирую эту функцию как есть, задание добавляется в очередь почтовых сообщений. Когда пришло время отправить электронное письмо, оно просто исчезнет из очереди, не отправив электронное письмо и не оставив никаких исключений в журналах.
Я вижу, что он отображается в пользовательском интерфейсе Sidekiq, а затем исчезает.
Я думаю, что письмо с подтверждением отправлено только потому, что оно не задерживается, но я не знаю, почему это происходит.
Все работает отлично в моей промежуточной среде. Разница в том, что он работает с mailtrap и не имеет таких рабочих мест, как производство.
Некоторый код, который может иметь отношение:
production.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:user_name => 'xxx',
:password => Rails.application.secrets.smtp_password,
:address => 'smtp.mandrillapp.com',
:domain => config.app_domain,
:port => 'xxx',
:authentication => :login
}
...
config.action_mailer.default_url_options = { :host => config.app_domain, :protocol => 'https' }
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
application.rb
config.active_job.queue_adapter = :sidekiq
Прошлись по этим ссылкам без решения:
http://guides.rubyonrails.org/active_job_basics.html http://api.rubyonrails.org/classes/ActionMailer/Base.html
Не найдено ни одной ссылки, имеющей отношение к моей проблеме.
- Пробовал передислокацию
- Пробовал перезапуск Sidekiq
- Пробовал перезапуск Redis
- Пробовал перезапуск самого сервера
- Пробовали отправки электронной почты из консоли - Успешной
- Пробовали отправки электронной почты с deliver_later (подождите: 1 мин.) - Неудачно
У меня возникла аналогичная проблема сегодня, я не уверен, что это помогает но попробовали ли вы запустить свой сервер с помощью этой команды? 'bundle exec sidekiq -q default -q mailers 'https://github.com/mperham/sidekiq/wiki/Active-Job#action-mailer – sirramongabriel
@sirramongabriel yep – MaxDBN
Вы выяснили источник этой проблемы? У меня очень похожая проблема. –