Shreyas S

Joined

770 Experience
0 Lessons Completed
1 Question Solved

Activity

I further inspected redis via redis-cli monitor and found out that ActionCable.server.broadcast publishes messages to local redis even though the remote redis url is mentioned in cable.yml

That is kinda weird. But I got it to work by directly creating a redis instance and publishing it to the channel

$redis = Redis.new(host: "#{ENV.fetch("REDIS_HOST")}", port: "#{ENV.fetch("REDIS_PORT")}", password: "#{ENV.fetch("REDIS_PASS")}")
$redis.publish "channel", { data: data }

Understanding how Action Cable uses Redis under the hood helped a lot. Many thanks to Chris for making videos on Action Cable!

I'm working on a rails app which uses action cable to notify users on the frontend when an event gets triggered.

I'm using a remote redis instance to work with action cable. So this is my dev env setup in cable.yml

development:
  adapter: redis
  url: redis://:<%= ENV.fetch("REDIS_PASS") %>@<%= ENV.fetch("REDIS_HOST") %>:<%= ENV.fetch("REDIS_PORT") %>/1

I'm able to create a websocket connection successfully without any problems.

But when I broadcast from rails console like this
ActionCable.server.broadcast "channel", { data: data }
It returns 0, which means the message isn't getting broadcasted.

In my cable.yml, if I change my url to local redis url
redis://localhost:6379
I am able to broadcast from rails console successfully and it returns 1

I'm not sure why it works with locally but not with remote redis server. How do I find what the problem is and fix this?

Posted in Realtime Notifications with ActionCable Discussion

Can you please share the link if you found it?

logo Created with Sketch.

Ruby on Rails tutorials, guides, and screencasts for web developers learning Ruby, Rails, Javascript, Turbolinks, Stimulus.js, Vue.js, and more. Icons by Icons8

© 2020 GoRails, LLC. All rights reserved.