【问题标题】:Django 3 + websocket (asgi, uvicorn) (circular import error for all imports in production server)Django 3 + websocket(asgi,uvicorn)(生产服务器中所有导入的循环导入错误)
【发布时间】:2021-08-18 15:50:32
【问题描述】:

项目在本地服务器上运行,但是当我尝试在生产服务器上运行时,它给出了错误ImportError: cannot import name 'LastModMixin' from partially initialized module 'snippets.models.abstracts' (most likely due to a circular import)例如,如果你删除这个导入,错误会被发送到另一个,等等,我尝试了手动

import django
django.setup()

settings.py, asgi.py但不起作用

这是我的 asgi.py

import os

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
from channels.http import AsgiHandler

from apps.drivers import routing

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')


application = ProtocolTypeRouter({
    "http": AsgiHandler(),
    "websocket": AuthMiddlewareStack(
        URLRouter(
            routing.websocket_urlpatterns
        )
    ),
})

我将用来启动服务器的命令

gunicorn project.asgi --preload -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8009

也试过daphne -p 8009 project.asgi:application但结果是一样的。

提前致谢

【问题讨论】:

    标签: python websocket uvicorn asgi django-3.2


    【解决方案1】:

    原来你需要在调用from my.app import routing之前调用get_asgi_application(),为此你需要这样做 django_asgi_app = get_asgi_application() from apps.drivers import routing 这样django.setup() 在导入my.apps 之前加载所有模块,get_asgi_application() 内部调用它

    在我的情况下工作 asgi.py

    import os
    from channels.auth import AuthMiddlewareStack
    from channels.routing import ProtocolTypeRouter, URLRouter
    from django.core.asgi import get_asgi_application
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
    
    django_asgi_app = get_asgi_application() #colling first
    from apps.drivers import routing # colling second
    
    application = ProtocolTypeRouter({
        "http": django_asgi_app,
        "websocket": AuthMiddlewareStack(
            URLRouter(
                routing.websocket_urlpatterns
            )
        ),
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-18
      相关资源
      最近更新 更多