The docs do mention this in a big callout at the top of the Channel Layers page :) http://channels.readthedocs.io/en/latest/topics/channel_layers.html
Andrew On Fri, Feb 2, 2018 at 8:52 PM, Ahmed Magdy <[email protected]> wrote: > Aha thanks for making it clear, I will read more about redis then. > Shouldn't the docs mention that though? > > On Saturday, February 3, 2018 at 6:47:47 AM UTC+2, Andrew Godwin wrote: >> >> No, there is no in-memory channel layer any more, only Redis is available >> at the moment. You must put something into the settings in order to make it >> function. >> >> Andrew >> >> On Fri, Feb 2, 2018 at 8:42 PM, Ahmed Magdy <[email protected]> wrote: >> >>> I thought it uses in memory channel layer by default if it's empty? I >>> didn't try setting a value, because only redis was available in v2.0.0 and >>> I don't like using stuff I don't understand. >>> >>> On Saturday, February 3, 2018 at 6:08:02 AM UTC+2, Andrew Godwin wrote: >>>> >>>> It needs to contain a value to work - what value were you trying that >>>> was not empty? >>>> >>>> Andrew >>>> >>>> On Fri, Feb 2, 2018 at 8:04 PM, Ahmed Magdy <[email protected]> wrote: >>>> >>>>> I tried not having CHANNEL_LAYERS or setting it to {} >>>>> same exception >>>>> >>>>> On Saturday, February 3, 2018 at 3:36:43 AM UTC+2, Andrew Godwin wrote: >>>>>> >>>>>> Do you have a CHANNEL_LAYERS setting in your settings file? If so, >>>>>> what is it set to? >>>>>> >>>>>> Andrew >>>>>> >>>>>> On Fri, Feb 2, 2018 at 5:17 PM, Ahmed Magdy <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> That's what I did after reading the documentation here's how my >>>>>>> channels files look like >>>>>>> >>>>>>> # settings.py >>>>>>> # ... >>>>>>> ASGI_APPLICATION = 'djangoChannels.routing.application' >>>>>>> # ... >>>>>>> >>>>>>> # routing.py >>>>>>> from django.conf.urls import url >>>>>>> >>>>>>> from channels.routing import ProtocolTypeRouter, URLRouter >>>>>>> from channels.auth import AuthMiddlewareStack >>>>>>> >>>>>>> from .consumers import ChatConsumer >>>>>>> >>>>>>> application = ProtocolTypeRouter({ >>>>>>> # Empty for now (http->django views is added by default) >>>>>>> 'websocket': AuthMiddlewareStack( >>>>>>> URLRouter([ >>>>>>> url('^sessions/$', ChatConsumer) >>>>>>> ]) >>>>>>> ) >>>>>>> }) >>>>>>> >>>>>>> # consumers.py >>>>>>> from asgiref.sync import AsyncToSync >>>>>>> from channels.generic.websocket import WebsocketConsumer >>>>>>> >>>>>>> class ChatConsumer(WebsocketConsumer): >>>>>>> >>>>>>> def connect(self): >>>>>>> AsyncToSync(self.channel_layer.group_add)("chat", self >>>>>>> .channel_name) >>>>>>> >>>>>>> def disconnect(self): >>>>>>> AsyncToSync(self.channel_layer.group_discard)("chat", self >>>>>>> .channel_name) >>>>>>> >>>>>>> >>>>>>> After connecting with JS websocket to >>>>>>> >>>>>>> ws://127.0.0.1:8000/sessions/ >>>>>>>> >>>>>>> >>>>>>> Raises an exception >>>>>>> >>>>>>> Performing system checks... >>>>>>>> >>>>>>>> System check identified no issues (0 silenced). >>>>>>>> February 03, 2018 - 03:14:29 >>>>>>>> Django version 2.0.2, using settings 'djangoChannels.settings' >>>>>>>> Starting ASGI/Channels development server at http://127.0.0.1:8000/ >>>>>>>> Quit the server with CTRL-BREAK. >>>>>>>> 2018-02-03 03:14:29,799 - INFO - server - HTTP/2 support not >>>>>>>> enabled (install the http2 and tls Twisted extras) >>>>>>>> 2018-02-03 03:14:29,800 - INFO - server - Listening on endpoint >>>>>>>> tcp:port=8000:interface=127.0.0.1 >>>>>>>> [2018/02/03 03:14:32] WebSocket HANDSHAKING /sessions/ [ >>>>>>>> 127.0.0.1:8631] >>>>>>>> ERROR:root:Exception inside application: 'NoneType' object has no >>>>>>>> attribute 'group_add' >>>>>>>> File "c:\python35\Lib\asyncio\tasks.py", line 241, in _step >>>>>>>> result = coro.throw(exc) >>>>>>>> File >>>>>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\consumer.py", >>>>>>>> line 53, in __call__ >>>>>>>> await await_many_dispatch([receive], self.dispatch) >>>>>>>> File >>>>>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\utils.py", >>>>>>>> line 48, in await_many_dispatch >>>>>>>> await dispatch(result) >>>>>>>> File >>>>>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >>>>>>>> line 84, in inner >>>>>>>> return await async_func(*args, **kwargs) >>>>>>>> File >>>>>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >>>>>>>> line 67, in __call__ >>>>>>>> return await asyncio.wait_for(future, timeout=None) >>>>>>>> File "c:\python35\Lib\asyncio\tasks.py", line 367, in wait_for >>>>>>>> return (yield from fut) >>>>>>>> File "c:\python35\Lib\asyncio\futures.py", line 358, in __iter__ >>>>>>>> yield self # This tells Task to wait for completion. >>>>>>>> File "c:\python35\Lib\asyncio\tasks.py", line 290, in _wakeup >>>>>>>> future.result() >>>>>>>> File "c:\python35\Lib\asyncio\futures.py", line 274, in result >>>>>>>> raise self._exception >>>>>>>> File "c:\python35\Lib\concurrent\futures\thread.py", line 55, in >>>>>>>> run >>>>>>>> result = self.fn(*self.args, **self.kwargs) >>>>>>>> File >>>>>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >>>>>>>> line 76, in thread_handler >>>>>>>> raise e >>>>>>>> File >>>>>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\asgiref\sync.py", >>>>>>>> line 74, in thread_handler >>>>>>>> self.func(*args, **kwargs) >>>>>>>> File >>>>>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\consumer.py", >>>>>>>> line 93, in dispatch >>>>>>>> handler(message) >>>>>>>> File >>>>>>>> "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\channels\generic\websocket.py", >>>>>>>> line 19, in websocket_connect >>>>>>>> self.connect() >>>>>>>> File "D:\Programming\DjangoWebsite\HUWebsite\husite\djangoChannel >>>>>>>> s\djangoChannels\consumers.py", line 8, in connect >>>>>>>> AsyncToSync(self.channel_layer.group_add)("chat", >>>>>>>> self.channel_name) >>>>>>>> 'NoneType' object has no attribute 'group_add' >>>>>>>> [2018/02/03 03:14:32] WebSocket DISCONNECT /sessions/ [ >>>>>>>> 127.0.0.1:8631] >>>>>>>> >>>>>>> >>>>>>> >>>>>>> On Friday, February 2, 2018 at 7:37:36 PM UTC+2, Andrew Godwin wrote: >>>>>>>> >>>>>>>> Hi Ahmed, >>>>>>>> >>>>>>>> In the new release channel layers are optional - if you don't >>>>>>>> configure them they will indeed come through as None. The settings >>>>>>>> format >>>>>>>> changed slightly too - you can read more here: >>>>>>>> http://channels.readthedocs.io/en/latest/topics/channel_layers.html >>>>>>>> >>>>>>>> Andrew >>>>>>>> >>>>>>>> On Fri, Feb 2, 2018 at 3:31 AM, Ahmed Magdy <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> I'm relatively new to channels and was using Channels v1.x.x >>>>>>>>> groups easily, but after v2.0.0 update and reading the documentation >>>>>>>>> >>>>>>>>> # This example uses WebSocket consumer, which is synchronous, and so >>>>>>>>> # needs the async channel layer functions to be converted. >>>>>>>>> from asgiref.sync import AsyncToSync >>>>>>>>> >>>>>>>>> class ChatConsumer(WebsocketConsumer): >>>>>>>>> >>>>>>>>> def connect(self): >>>>>>>>> AsyncToSync(self.channel_layer.group_add)("chat", >>>>>>>>> self.channel_name) >>>>>>>>> >>>>>>>>> def disconnect(self): >>>>>>>>> AsyncToSync(self.channel_layer.group_discard)("chat", >>>>>>>>> self.channel_name) >>>>>>>>> >>>>>>>>> Enter code here... >>>>>>>>> >>>>>>>>> channel_layer, channel_name are always NoneType and exception >>>>>>>>> occurs. >>>>>>>>> >>>>>>>>> Is that because I didn't configure channel layers? But in the old >>>>>>>>> version I also used the in memory type and Groups were working well. >>>>>>>>> >>>>>>>>> -- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "Django users" group. >>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>> send an email to [email protected]. >>>>>>>>> To post to this group, send email to [email protected]. >>>>>>>>> Visit this group at https://groups.google.com/group/django-users. >>>>>>>>> To view this discussion on the web visit >>>>>>>>> https://groups.google.com/d/msgid/django-users/fff84d59-da69 >>>>>>>>> -47d5-a7c3-ee0221680642%40googlegroups.com >>>>>>>>> <https://groups.google.com/d/msgid/django-users/fff84d59-da69-47d5-a7c3-ee0221680642%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>> . >>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> <https://lh3.googleusercontent.com/-fvPoTzCZOwo/WnUNLrDzVZI/AAAAAAAAC6Q/lNyrJjyOUtkudo5F--8pKqzlX23r25i4gCLcBGAs/s1600/Capture.JPG> >>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Django users" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to [email protected]. >>>>>>> To post to this group, send email to [email protected]. >>>>>>> Visit this group at https://groups.google.com/group/django-users. >>>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/django-users/8ca34830-d807 >>>>>>> -447c-836b-d2e52ee87b6d%40googlegroups.com >>>>>>> <https://groups.google.com/d/msgid/django-users/8ca34830-d807-447c-836b-d2e52ee87b6d%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> >>>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Django users" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To post to this group, send email to [email protected]. >>>>> Visit this group at https://groups.google.com/group/django-users. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/django-users/d0fc9f6a-43f4 >>>>> -41c1-8a5e-b988a9fa7870%40googlegroups.com >>>>> <https://groups.google.com/d/msgid/django-users/d0fc9f6a-43f4-41c1-8a5e-b988a9fa7870%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Django users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at https://groups.google.com/group/django-users. >>> To view this discussion on the web visit https://groups.google.com/d/ms >>> gid/django-users/fb9aa942-8d53-472c-bec0-a1c4a46171d3%40googlegroups.com >>> <https://groups.google.com/d/msgid/django-users/fb9aa942-8d53-472c-bec0-a1c4a46171d3%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/django-users/3329c3e6-a7db-4879-9b87-1c478ba4f0da%40googlegroups.com > <https://groups.google.com/d/msgid/django-users/3329c3e6-a7db-4879-9b87-1c478ba4f0da%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAFwN1uraV_QDxPqRhUu7R9k4BBVNsOr58BJz%2Bt1T-W0tazK05g%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

