prograils
prograils

Reputation: 2376

Does Action Cable 5 require Redis?

I use:

rails (5.0.2)
actioncable (5.0.2)
puma (3.8.2)

I have a Rails 5 Action Cable demo chat and a year ago it didn't work without Redis - and now it does! (after bundle update).

In other words, I succedeed to make my demo chat to work in development mode without Redis. I set the config/cable.yml like this:

development:
  adapter: async

test:
  adapter: async

production:
  adapter: async 

and start rails c. That's it - the chat is working, no problem. So Redis is obviously not needed anymore - unlike a year-ago times?

Also I found a way to make my demo chat to work with Redis. To do so I change the config/cable.yml like this:

redis: &redis
  adapter: redis
  url: redis://localhost:6379/1

production: *redis
development: *redis
test: *redis

than add gem 'redis', '~>3.2' to my Gemfile (+ bundle install), start Redis redis-server and then rails c.

So my questions are:

  1. Does Action Cable 5 require Redis to work? (looks like don't but I'm not sure).
  2. If (apparently) Action Cable 5 can work with or without Redis - what's the difference?
  3. What is gem 'redis', '~>3.2'? What is it for?

Generally I have no idea what is now the proper usage of Action Cable 5 in terms of Redis usage (non-usage?). Is there any difference for the development or production mode?

Upvotes: 10

Views: 9188

Answers (3)

PMc
PMc

Reputation: 118

I am currently making this work in Rails-8, and also had the experience that "async" doesn't work here.

More interesting, however, is the reason why async does work for some people and doesn't for others - in other words, as the question here is, what is the difference that makes Redis work always and async only sometimes? And after I stopped to manually write my config files and let rails do it, a comment appeared in cable.yml which explains the phenomenon:

# Async adapter only works within the same process, so for manually
# triggering cable updates from a console, and seeing results in the
# browser, you must do so from the web console (running inside the
# dev process), not a terminal started via bin/rails console! 

So here You have it. :) I'm now trying solid_cable ...

Upvotes: 0

Confused Vorlon
Confused Vorlon

Reputation: 10426

You can use the async adapter in dev, but the docs state that

The async adapter is intended for development/testing and should not be used in production.

http://edgeguides.rubyonrails.org/action_cable_overview.html#configuration

I tried it anyway - and at least with my setup (nginx, passenger) - the async adapter just didn't work. I'm guessing thread/process issues

For production, that leaves you the option of Redis or PostgreSql

Upvotes: 1

Roman Kiselenko
Roman Kiselenko

Reputation: 44360

Does Action Cable 5 require Redis?

No. According to the documentation, it's able to use other adapters.

Action Cable provides a subscription adapter interface to process its pubsub internals. By default, asynchronous, inline, PostgreSQL, evented Redis, and non-evented Redis adapters are included. The default adapter in new Rails applications is the asynchronous (async) adapter.

Questions:

Does Action Cable 5 require Redis to work? (looks like don't but I'm not sure).

No.

If (apparently) Action Cable 5 can work with or without Redis - what's the difference?

In case of ActionCable there in no differences, it uses an abstraction adapter and does not depend on transport protocol.

What is gem 'redis', '~>3.2'? What is it for?

It's for redis and provides an interface for communication with redis-server.

Upvotes: 10

Related Questions