app-generator / sample-django-real-time-charts

MIT License
2 stars 1 forks source link

Runtime Error - After Fresh Install #1

Open app-generator opened 2 years ago

app-generator commented 2 years ago

Short Log:

WebSocket CONNECT /ws/users-created/ [127.0.0.1:51109]
Exception inside application: ERR unknown command 'BZPOPMIN'
...

Full Log

(env) PS D:\work\repo-samples\sample-django-real-time-charts> python manage.py runserver 8001  
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
May 22, 2022 - 16:02:45
Django version 4.0.4, using settings 'core.settings'
Starting ASGI/Channels version 3.0.4 development server at http://127.0.0.1:8001/
Quit the server with CTRL-BREAK.
HTTP GET / 200 [0.01, 127.0.0.1:51097]
WebSocket HANDSHAKING /ws/products/ [127.0.0.1:51102]
WebSocket CONNECT /ws/products/ [127.0.0.1:51102]
WebSocket HANDSHAKING /ws/users-purchased/ [127.0.0.1:51106]
WebSocket CONNECT /ws/users-purchased/ [127.0.0.1:51106]
WebSocket HANDSHAKING /ws/users-created/ [127.0.0.1:51109]
WebSocket CONNECT /ws/users-created/ [127.0.0.1:51109]
Exception inside application: ERR unknown command 'BZPOPMIN'
Traceback (most recent call last):
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\staticfiles.py", line 44, in __call__
    return await self.application(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\routing.py", line 71, in __call__
    return await application(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\sessions.py", line 47, in __call__
    return await self.inner(dict(scope, cookies=cookies), receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\sessions.py", line 263, in __call__
    return await self.inner(wrapper.scope, receive, wrapper.send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\auth.py", line 185, in __call__
    return await super().__call__(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\middleware.py", line 26, in __call__
    return await self.inner(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\routing.py", line 150, in __call__
    return await application(
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\consumer.py", line 94, in app
    return await consumer(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\consumer.py", line 58, in __call__
    await await_many_dispatch(
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\utils.py", line 58, in await_many_dispatch
    await task
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\utils.py", line 50, in await_many_dispatch
    result = task.result()
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels_redis\core.py", line 492, in receive
    message_channel, message = await self.receive_single(
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels_redis\core.py", line 547, in receive_single
    content = await self._brpop_with_clean(
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels_redis\core.py", line 385, in _brpop_with_clean
    result = await connection.bzpopmin(channel, timeout=timeout)
aioredis.errors.ReplyError: ERR unknown command 'BZPOPMIN'
Exception inside application: ERR unknown command 'BZPOPMIN'
Traceback (most recent call last):
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\staticfiles.py", line 44, in __call__
    return await self.application(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\routing.py", line 71, in __call__
    return await application(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\sessions.py", line 47, in __call__
    return await self.inner(dict(scope, cookies=cookies), receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\sessions.py", line 263, in __call__
    return await self.inner(wrapper.scope, receive, wrapper.send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\auth.py", line 185, in __call__
    return await super().__call__(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\middleware.py", line 26, in __call__
    return await self.inner(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\routing.py", line 150, in __call__
    return await application(
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\consumer.py", line 94, in app
    return await consumer(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\consumer.py", line 58, in __call__
    await await_many_dispatch(
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\utils.py", line 58, in await_many_dispatch
    await task
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\utils.py", line 50, in await_many_dispatch
    result = task.result()
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels_redis\core.py", line 492, in receive
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\sessions.py", line 47, in __call__
    return await self.inner(dict(scope, cookies=cookies), receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\sessions.py", line 263, in __call__
    return await self.inner(wrapper.scope, receive, wrapper.send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\auth.py", line 185, in __call__
    return await super().__call__(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\middleware.py", line 26, in __call__
    return await self.inner(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\routing.py", line 150, in __call__
    return await application(
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\consumer.py", line 94, in app
    return await consumer(scope, receive, send)
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\consumer.py", line 58, in __call__
    await await_many_dispatch(
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\utils.py", line 58, in await_many_dispatch
    await task
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\utils.py", line 50, in await_many_dispatch
    result = task.result()
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels_redis\core.py", line 492, in receive
    message_channel, message = await self.receive_single(
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels_redis\core.py", line 547, in receive_single
    content = await self._brpop_with_clean(
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels_redis\core.py", line 385, in _brpop_with_clean
    result = await connection.bzpopmin(channel, timeout=timeout)
aioredis.errors.ReplyError: ERR unknown command 'BZPOPMIN'
WebSocket DISCONNECT /ws/products/ [127.0.0.1:51102]
WebSocket DISCONNECT /ws/users-purchased/ [127.0.0.1:51106]
WebSocket DISCONNECT /ws/users-created/ [127.0.0.1:51109]
app-generator commented 2 years ago

The problem might be environmental:

https://github.com/redis/hiredis/issues/649

We might need to fall back on the dependencies to work with Redis 4.

DeFidelity commented 2 years ago

Thank you so much for the insight, and for pointing out the bug, I'll get that fixed shortly.

app-generator commented 2 years ago

The app should work with these dependencies, compatible with Redis 4:

Django==3.2.10 
channels==2.4.0
daphne==2.5.0 
channels-redis==3.4.0
django-channels==0.7.0
DeFidelity commented 2 years ago

Issue resolved, app now works well with Redis 4 and channels_redis==2.4.x

app-generator commented 2 years ago

Hello @DeFidelity

The project cannot be used with Redis 4.

Please fix it and respect the following:

To move forward from this point, please follow this set up:

$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py runserver

At this moment, the runserver exits with error:

AttributeError: type object 'SalesConsumer' has no attribute 'as_asgi'

Full ERROR log

python manage.py runserver       
Watching for file changes with StatReloader
Performing system checks...

  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\management\commands\runserver.py", line 126, in get_application
    return StaticFilesWrapper(get_default_application())
  File "D:\work\repo-samples\sample-django-real-time-charts\env\lib\site-packages\channels\routing.py", line 29, in get_default_application
    module = importlib.import_module(path)
  File "C:\Python\Python310\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "D:\work\repo-samples\sample-django-real-time-charts\core\asgi.py", line 16, in <module>
    from apps.routing import ws_urlpatterns
  File "D:\work\repo-samples\sample-django-real-time-charts\apps\routing.py", line 6, in <module>
    path('ws/products/',SalesConsumer.as_asgi()),
AttributeError: type object 'SalesConsumer' has no attribute 'as_asgi'
DeFidelity commented 2 years ago

The error as_asgi() is caused by channels 2.x auto instalment by channel-redis 2.4.x and it is due to the dependencies arrangement in the requirements file, channel-redis 2.4.1 needs to be installed beforechannels 3.0.4 and that is fixed now.