Heroku部署带CRUD的Rails应用遇Redis连接拒绝错误求助
解决Heroku上Rails应用的Redis连接拒绝错误
从你的错误日志和配置信息来看,问题很明确:你的Rails应用在尝试连接本地的Redis服务(127.0.0.1:6379),但Heroku的生产环境里并没有默认运行本地Redis实例,所以才会抛出Errno::ECONNREFUSED(连接被拒绝)的错误。下面是具体的解决步骤:
具体解决步骤
为应用添加Heroku Redis服务:
Heroku提供官方的Redis插件,你可以通过以下命令给painting-art应用添加免费的入门级实例:heroku addons:create heroku-redis:hobby-dev --app painting-art执行完这个命令后,Heroku会自动为你的应用添加
REDIS_URL环境变量,指向云端的Redis服务地址。验证环境变量是否生效:
再次执行配置检查命令,确认REDIS_URL已经存在:heroku config --app painting-art你应该能看到类似
REDIS_URL: redis://h:xxxxxx@xxxx.compute-1.amazonaws.com:xxxx的条目。修改Rails应用的Redis配置:
根据你的应用使用Redis的场景,调整对应的配置文件,确保它读取REDIS_URL环境变量,而不是硬编码本地地址:- 如果用Redis做缓存:在
config/environments/production.rb中修改:config.cache_store = :redis_cache_store, { url: ENV['REDIS_URL'] } - 如果用Redis存储会话:在
config/environments/production.rb中设置:config.session_store :redis_store, servers: ENV['REDIS_URL'] - 如果是Sidekiq等后台任务依赖Redis:在
config/sidekiq.yml中添加:
或者在:url: <%= ENV['REDIS_URL'] %>config/initializers/sidekiq.rb中配置:
特别注意:如果你的代码里硬写了Sidekiq.configure_server do |config| config.redis = { url: ENV['REDIS_URL'] } end Sidekiq.configure_client do |config| config.redis = { url: ENV['REDIS_URL'] } end127.0.0.1:6379,一定要替换成读取ENV['REDIS_URL'],这是解决问题的核心!
- 如果用Redis做缓存:在
重新部署并重启应用:
保存配置修改后,提交代码并重新部署到Heroku:git add . git commit -m "Update Redis config to use Heroku Redis service" git push heroku main然后重启应用确保新配置生效:
heroku restart --app painting-art
完成以上步骤后,你的应用应该就能正常连接到Heroku提供的Redis服务,500错误也就解决了。
内容的提问来源于stack exchange,提问作者Pooja M
相关产品推荐
相关产品推荐

