Does Action Cable 5 require Redis?

2019-06-21 18:24发布

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?

2条回答
Juvenile、少年°
2楼-- · 2019-06-21 18:29

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.

查看更多
唯我独甜
3楼-- · 2019-06-21 18:34

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

查看更多
登录 后发表回答