我使用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.log
或mail.log
中没有收到任何内容。