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] > <javascript:>> 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\djangoChannels\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] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> 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/msgid/django-users/fb9aa942-8d53-472c-bec0-a1c4a46171d3%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

