0

项目在本地服务器上运行,但是当我尝试在生产服务器上运行时,它给出了错误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,但结果是一样的。

提前致谢

4

1 回答 1

0

事实证明,您需要在调用get_asgi_application()之前调用from my.app import routing,为此您需要这样做以便 django_asgi_app = get_asgi_application() from apps.drivers import routingdjango.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
        )
    ),
})
于 2021-08-19T13:33:16.317 回答