使用SideKiq删除某些电子邮件的延迟

时间:2016-08-05 02:53:22

标签: ruby-on-rails redis actionmailer sidekiq

我使用SideKiq和Redis在我的Rails(4.2)网站上异步发送电子邮件,但有些电子邮件需要很长时间才能发送。大多数电子邮件需要5到15分钟才能发送(我不确定这是否正常,可能是问题的一部分)。对于大多数电子邮件,我发送此等待是好的,但对于确认电子邮件,我需要立即或多或少地发送它们。

通常,当我发送电子邮件时,我会这样发送:

UserMailer.delay.my_email(args)

要立即发送电子邮件,我已尝试以下所有方法:

UserMailer.my_email(args).deliver
UserMailer.my_email(args).deliver!
UserMailer.my_email(args).deliver_now
UserMailer.my_email(args).deliver_now!

但是所有这些都会导致504错误。当我尝试发送电子邮件时,页面会等待几秒钟然后我进入unicorn.log

Started POST "/my-path/" for 0.0.0.0 at 0000-00-00 00:00:00 +0000
Processing by MyController#my_path as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"...", ...}
  Rendered user_mailer/my_email.html.haml within layouts/user_mailer (0.0ms)
E, [0000-00-00T00:00:00.000000 #00000] ERROR -- : worker=1 PID:00000 timeout (61s > 60s), killing
E, [0000-00-00T00:00:00.000000 #00000] ERROR -- : reaped #<Process::Status: pid 00000 SIGKILL (signal 9)> worker=1
I, [0000-00-00T00:00:00.000000 #00000]  INFO -- : worker=1 spawning...
I, [0000-00-00T00:00:00.000000 #00001]  INFO -- : worker=1 spawned pid=00001
I, [0000-00-00T00:00:00.000000 #00001]  INFO -- : Refreshing Gem list
I, [0000-00-00T00:00:00.000000 #00001]  INFO -- : worker=1 ready

这是我的sidekiq.yml(制作和预览都需要很长时间):

---
:concurrency: 5
:logfile: log/sidekiq.log
preview:
  :pidfile: /home/unicorn/sidekiq_preview.pid
production:
  :pidfile: /home/unicorn/sidekiq_production.pid
  :concurrency: 15

我在sidekiq.logmail.log中没有收到任何内容。

0 个答案:

没有答案