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

Heroku上RedisToGo连接失败求助:Sidekiq启动报Redis::CannotConnectError

问题:Heroku + RedisToGo + Sidekiq 连接拒绝错误

我在Heroku上用RedisToGo作为Sidekiq的后端存储,但每次执行heroku run bundle exec sidekiq都会碰到Redis连接拒绝的错误。已经试过网上能找到的所有方案都没用,求各位大佬给点新思路!

当前配置

执行heroku config的输出:

REDISTOGO_URL: redis://redistogo:....@albacore.redistogo.com:11539/
REDIS_PROVIDER: REDISTOGO_URL
REDIS_URL: redis://....@albacore.redistogo.com:11539/

错误日志

运行Sidekiq时的错误信息:

4 TID-81oc0 INFO: Booting Sidekiq 4.1.2 with redis options {:size=>2, :url=>"redis://redistogo:REDACTED@albacore.redistogo.com:11539/"}
Error connecting to Redis on albacore.redistogo.com:11539 (Errno::ECONNREFUSED)
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.3.0/lib/redis/client.rb:345:in `rescue in establish_connection'
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.3.0/lib/redis/client.rb:331:in `establish_connection'
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.3.0/lib/redis/client.rb:101:in `block in connect'
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.3.0/lib/redis/client.rb:293:in `with_reconnect'
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.3.0/lib/redis/client.rb:100:in `connect'
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.3.0/lib/redis/client.rb:364:in `ensure_connected'
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.3.0/lib/redis/client.rb:221:in `block in process'
/app/bin/bundle:3:in `load'
/app/bin/bundle:3:in `<main>'
4 TID-lvm10 INFO: [Sidetiq] Sidetiq::Actor::Clock id: 36749520 shutting down ...
4 TID-lrfno INFO: [Sidetiq] Sidetiq::Actor::Handler id: 36587080 shutting down ...
4 TID-znma0 INFO: [Sidetiq] Sidetiq::Actor::Handler id: 59890980 shutting down ...
4 TID-lrbco INFO: [Sidetiq] Sidetiq::Actor::Handler id: 36548460 shutting down ...
4 TID-zm5yo INFO: [Sidetiq] Sidetiq::Actor::Handler id: 59822760 shutting down ...
4 TID-zmyrw INFO: [Sidetiq] Sidetiq::Actor::Handler id: 59884740 shutting down ...
4 TID-zog78 INFO: [Sidetiq] Sidetiq::Actor::Handler id: 59929360 shutting down ...
4 TID-zm9y0 INFO: [Sidetiq] Sidetiq::Actor::Handler id: 59853240 shutting down ...
4 TID-zlj9g INFO: [Sidetiq] Sidetiq::Actor::Handler id: 59793140 shutting down ...

尝试过的方案(均无效)

  • 检查环境变量是否正确设置
  • 重启Heroku dyno
  • 重新安装Redis gem
  • 确认Sidekiq配置读取环境变量

求新的排查方向/解决方案


可能的解决思路

我整理了几个可能的排查点,你可以试试:

  1. 检查RedisToGo实例状态
    登录Heroku的RedisToGo管理面板,看看你的实例是不是正常运行状态。免费或基础套餐有时候会因为资源不足被临时暂停,或者遇到维护,这种情况下重启实例可能有用。

  2. 验证Redis URL的有效性
    直接用redis-cli测试连接,看看是不是URL本身有问题:

heroku run redis-cli -u $REDISTOGO_URL

如果连接失败,可能是URL里的密码有特殊字符没转义,或者实例信息有误。可以去RedisToGo控制台重新生成实例URL,然后更新Heroku配置:

heroku config:set REDISTOGO_URL="新生成的完整URL"
  1. 检查IP白名单限制
    部分RedisToGo套餐会有IP白名单,Heroku的出站IP是动态的,如果你的套餐要求白名单,要么换不需要白名单的套餐,要么联系RedisToGo支持调整规则。

  2. 升级Redis gem版本
    你用的Redis 3.3.0是比较旧的版本,和Sidekiq 4.1.2虽然兼容,但可能存在已知的连接bug。试试升级到3.5.x版本:
    修改Gemfile:

gem 'redis', '~> 3.5.0'

然后重新部署:

bundle install
git add Gemfile.lock
git commit -m "Update redis gem to 3.5.x"
git push heroku master
  1. 确认Sidekiq配置没有硬编码
    检查config/initializers/sidekiq.rb,确保配置是读取环境变量,而不是硬编码的地址:
Sidekiq.configure_client do |config|
  config.redis = { url: ENV['REDISTOGO_URL'], size: 2 }
end

Sidekiq.configure_server do |config|
  config.redis = { url: ENV['REDISTOGO_URL'], size: 12 }
end

如果之前有硬编码的Redis地址,改成上面的配置试试。

  1. 重新创建Sidekiq worker dyno
    有时候dyno的网络会出问题,试试先关掉再重新启动:
heroku ps:scale worker=0
heroku ps:scale worker=1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:46:52