Reputation: 2376
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:
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
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
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
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