Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Runtime Error - After Fresh Install #1

Open
app-generator opened this issue May 22, 2022 · 6 comments
Open

Runtime Error - After Fresh Install #1

app-generator opened this issue May 22, 2022 · 6 comments
Assignees
Labels
bug Something isn't working

Comments

@app-generator
Copy link
Owner

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 app-generator added the bug Something isn't working label May 22, 2022
@app-generator
Copy link
Owner Author

The problem might be environmental:

redis/hiredis#649

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

@DeFidelity
Copy link
Collaborator

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

@app-generator
Copy link
Owner Author

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
Copy link
Collaborator

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

@app-generator
Copy link
Owner Author

Hello @DeFidelity

The project cannot be used with Redis 4.

Please fix it and respect the following:

  • Make sure your redis Version is 4.x
  • Update the project with the latest GITHUB sources
  • Update the code using a fresh clone (you might have local/uncommitted files)
  • Don't commit anymore pyc files
  • Don't add more dependencies in requirements and keep the current versions
    • in latest commit 80+ modules were saved, most of them unrelated to the project

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

  • clone the latest version
  • uninstall your global Python dependencies
  • create a new virtual environment
  • install ONLY the dependencies saved in the requirements file
  • start the project:
$ 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
Copy link
Collaborator

DeFidelity commented May 26, 2022

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 before channels 3.0.4 and that is fixed now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants