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
相关产品推荐
相关产品推荐

