问题:需要异步发送来自Rails的电子邮件。 环境:Windows 7,Ruby 2.0,Rails 4.1,Sidekiq,Redis
设置完所有内容后,启动Sidekiq并启动Redis,我可以看到邮件请求通过显示器排队到Redis:
1414256204.699674 "exec"
1414256204.710675 "multi"
1414256204.710675 "sadd" "queues" "default"
1414256204.710675 "lpush" "queue:default" "{\"retry\":true,\"queue\":\"default\",\"class\":\"Sidekiq::Extensions::DelayedMailer\",\"args\":[\"---\\n- !ruby/class 'UserMailer'\\n- :async_reminder\\n- - 673\\n\"],\"jid\":\"d4024c0c219201e5d1649c54\",\"enqueued_at\":1414256204.709674}"
但邮件方法似乎永远不会被执行。邮件没有被发送,也没有出现任何日志消息。
Redis如何知道在队列上执行作业,是否需要在环境中设置其他内容才能知道应用程序所在的位置?
delayed_job是更好的解决方案吗?
我在一个窗口中启动redis,在另一个窗口中绑定exec sidekiq,在第三个窗口中绑定服务器。
如何获取和处理redis队列中的项目? sidekiq是否将事物放在redis队列上并检查是否添加了需要处理的内容?
答案 0 :(得分:4)
Redis仅用于存储。它存储要完成的工作。它不会执行任何操作。 DelayedJob使用您的数据库进行作业存储而不是Redis。
Rails进程将新作业推送到Redis。
Sidekiq进程从Redis弹出作业并执行它们。
在MONITOR
输出中,当Rails发送邮件时,您应该看到LPUSH
命令。您还应该看到来自Sidekiq的BRPOP
命令。
您需要确保Rails和Sidekiq进程使用相同的Redis服务器,数据库编号和命名空间(如果有)。这是他们不经常遇到的常见问题。