You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Rails应用使用Sidekiq发邮件时任务卡在enqueued如何解决

问题修复步骤

1. 统一Redis配置,修正地址读取变量

当前三处Redis配置完全不匹配,导致任务入队和Sidekiq消费不在同一个Redis库:

  • 首先修改application.rb,同时配置Sidekiq客户端(Web端入队用)和服务端(Sidekiq消费用),统一读取同一个环境变量:
config.active_job.queue_adapter = :sidekiq
config.action_mailer.deliver_later_queue_name = 'mailers'

Sidekiq.configure_client do |c|
  c.redis = { url: ENV['REDIS_URL_SIDEKIQ'] }
end
Sidekiq.configure_server do |c|
  c.redis = { url: ENV['REDIS_URL_SIDEKIQ'] }
end
  • 然后修改docker-compose.yml,统一web和sidekiq服务的Redis环境变量值,保证指向同一个Redis库,比如都改为redis://redis:6379/1即可。

2. 修正路径不一致问题

你的Dockerfile工作目录和docker-compose挂载目录不匹配,会导致Sidekiq加载不到应用代码,二选一调整即可:

  • 方案1:修改Dockerfile的WORKDIR /myapp为WORKDIR /project,同时把所有COPY路径对应的目标目录改为/project
  • 方案2:修改docker-compose里所有服务的volumes挂载规则,从.:/project改为.:/myapp

3. 修正docker-compose.yml的缩进错误

当前elasticsearch服务的缩进属于web服务的子节点,属于配置错误,调整为和web、db服务平级的缩进即可。

4. 补充devise-async队列配置

在devise_async.rb里指定队列和Sidekiq监听的队列保持一致:

Devise::Async.setup do |config|
  config.enabled = true
  config.queue = 'mailers'
end

5. 重启服务生效

修改完成后执行以下命令重建重启所有服务:

docker-compose down
docker-compose up --build

重启后再测试注册流程,邮件任务即可被Sidekiq正常消费。

内容的提问来源于stack exchange,提问作者Theopap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:39:02