【发布时间】:2025-08-04 15:55:02
【问题描述】:
问题:需要从 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,在第三个窗口启动 rails server。
redis 队列中的项目如何被提取和处理? sidekiq 是否既将内容放入 redis 队列,又检查是否添加了需要处理的内容?
【问题讨论】:
-
看看 Railscast 教程,你可能漏掉了什么:railscasts.com/episodes/366-sidekiq
-
我按照引用的 railscast 进行设置。有什么描述 rails -> sidekiq -> redis -> async 方法处理的吗?
-
你有运行 sidekiq 吗?
标签: ruby-on-rails redis actionmailer