上周RedisToGo在Herokum上被终止,这让我别无选择,只能找到替代方案。我从Heroku获得了一个新的订阅:Heroku Redis。
除了与ActionCable相关的事情外,一切似乎都很好(所有任务/作业(。
[ActionCable] [#######] Registered connection (#########)
2022-08-17T00:40:23.213184+00:00 app[web.1]: #<Thread:0x00007e#####@/app/vendor/bundle/ruby/2.6.0/gems/actioncable-5.1.7/lib/action_cable/subscription_adapter/redis.rb:144 run> terminated with exception (report_on_exception is true):
2022-08-17T00:40:23.213206+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:268:in `rescue in io': Connection lost (ECONNRESET) (Redis::ConnectionError)
在过去的几天里,我尝试了各种各样的把戏,但都无济于事。我的cable.yml
文件看起来像:
production:
adapter: redis
url: <%= ENV['REDIS_URL'] %>
我的redis.rb
文件如下所示:
uri = if Rails.env == 'production'
URI.parse(ENV["REDIS_URL"])
else
URI.parse("redis://localhost:6379")
end
Resque.redis = Redis.new(host: uri.host, port: uri.port, password: uri.password, ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE })
我是否遗漏了导致错误的某些参数?
我使用Heroku Redis,下面是我的cable.yml
的样子:
development:
adapter: redis
url: redis://localhost:6379/1
channel_prefix: myapp_development
test:
adapter: redis
url: redis://localhost:6379/1
channel_prefix: myapp_test
production:
adapter: redis
url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
channel_prefix: myapp_production
ssl_params:
verify_mode: <%= OpenSSL::SSL::VERIFY_NONE %>
如果你的任务和作业不使用Redis(如果ActionCable是唯一尝试使用Redis的东西(,那么你的Redis可能实际上没有正确设置。这是文件。
- 检查以确保Heroku实际设置了
REDIS_URL
环境变量:
$ heroku config | grep REDIS
> REDIS_URL: redis://h:asdfqwer1234asdf@ec2-111-1-1-1.compute-1.amazonaws.com:111
- 确保您的实例具有正常配置:https://devcenter.heroku.com/articles/heroku-redis#configuring-您的实例
另外两个有用的来源:
如何解决Heroku 上Redis 6的SSL错误
ActionCable Redis适配器与Heroku Redis 6 崩溃