22

我已按照频道教程进行操作,但在运行这些错误时抛出

包的版本是 channels==2.1.2 Django==2.0.4

我错过了什么? 在 settings.py

INSTALLED_APPS = [
   "channels"
    ....
]

ROOT_URLCONF = 'myapp.urls'
ASGI_APPLICATION = "myapp.routing.application"

添加文件 mayapp/routing.py

from channels.routing import ProtocolTypeRouter 

application = ProtocolTypeRouter({
    # Empty for now (http->django views is added by default)
})

这是错误日志

System check identified no issues (0 silenced).
August 01, 2018 - 13:11:42
Django version 2.0.4, using settings 'myapp.local_settings'
Starting ASGI/Channels version 2.1.2 development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f71ecfb6400>
Traceback (most recent call last):
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/routing.py", line 33, in get_default_application
    module = importlib.import_module(path)
  File "/home/vkchlt0192/myapp/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'myapp.routing'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/django/utils/autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/management/commands/runserver.py", line 80, in inner_run
    application=self.get_application(options),
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/management/commands/runserver.py", line 105, in get_application
    return StaticFilesWrapper(get_default_application())
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/routing.py", line 35, in get_default_application
    raise ImproperlyConfigured("Cannot import ASGI_APPLICATION module %r" % path)
django.core.exceptions.ImproperlyConfigured: Cannot import ASGI_APPLICATION module 'myapp.routing'
4

15 回答 15

10

在我的情况下,在不同的文件中导入错误。

你应该做的是

python manage.py shell
from mysite.routing import application

查看它产生的确切错误并尝试修复它

于 2020-08-15T10:01:59.713 回答
6

只是改变

ASGI_APPLICATION = mysite.routing.application

ASGI_APPLICATION = "路由.应用"

于 2018-11-19T18:36:32.240 回答
4

检查 consumer.py 中的任何潜在错误(可能是导入错误)。此外,尝试将频道作为第一项放在 settings.py 中的 INSTALLED_APPS 中。

如渠道文件所述:

Channels 开发服务器将与需要重载或替换 runserver 命令的任何其他第三方应用程序发生冲突。这种冲突的一个例子是来自 whitenoise 的 whitenoise.runserver_nostatic。为了解决此类问题,请尝试将频道移动到您的 INSTALLED_APPS 的顶部或完全删除有问题的应用程序。

于 2019-01-01T13:22:28.623 回答
2

万一有人来了。请记住:ASGI_APPLICATION = "myapp.routing.application" 应该放在 settings.py 的底部,以确保在生产中不会遇到任何问题!

mysite/myapp/routing.py

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            myapp.routing.websocket_urlpatterns
        )
    ),
})

我的应用程序/路由.py

from django.urls import path
from . import consumers

websocket_urlpatterns = [
    path('chatroompage', consumers.ChatConsumer),
]
于 2019-10-15T22:17:59.253 回答
2

您需要将routing.py文件放入mayapp/mayapp/routing.py其中而不是mayapp/routing.py

于 2018-10-14T13:05:21.893 回答
1

这对我有帮助:一切都ASGI_APPLICATION很好(感谢此处给出的所有先前答案)。但是我进一步阅读了日志,发现在其他地方出现了导入错误:

ImportError: cannot import name 'channel_session_user_from_http' from 'channels.auth'

一旦我摆脱它,一切都回到了正轨。

于 2021-03-01T15:35:37.870 回答
1

我也面临同样的问题。
确保:
=> routing.py 文件应该在项目根文件夹中(即 django 服务器,一个有 settings.py、wsgi.py、..)
=> 在 settings.py 中包含,ASGI_APPLICATION = "yourprojectrootname.routing 。应用”

=> 有时候,routing.py 文件里面的编码可能会产生这个错误,检查是否是这种情况删除所有编码并输入通用模板编码,

from channels.routing import ProtocolTypeRouter

application = ProtocolTypeRouter({
    # Empty for now (http->django views is added by default)
})

然后运行'python manage.py runserver'。这一次,如果你没有收到任何错误,那么问题在于在 routing.py 中进行编码。调试并修复问题。

=>在其他情况下,这可能是版本问题,降级到频道==2.1.2 有效

于 2020-03-16T13:33:09.970 回答
1

在我的情况下,consumer.py 中有未解析的包检查您的频道 .py 文件中是否有任何未解析的包

于 2019-03-22T20:16:15.637 回答
0

更改定义 ASGI_APPLICATION 变量和 CHANNEL_LAYERS.default.ROUTING 变量

<project_name>.routing.application

routing.application

有了这个,我可以正常运行

于 2021-04-02T05:57:50.677 回答
0

你不应该把它放在routing.py里面,mysite/mysite/否则mysite/你将无法ASGI_APPLICATION = mysite.routing.application在设置文件中使用,你会得到那个错误。

于 2020-07-17T09:56:10.907 回答
0

我最近遇到了这个问题,很快就解决了。检查 and 中的配置后settings.pyrouting.py我发现问题出在这一行:

from channels.auth import AuthMiddlewareStack

问题是版本兼容性。然后,我将其升级requirements.txt到以下版本,它运行良好。

channels==2.4.0
channels-redis==2.4.2
daphne==2.5.0
于 2020-05-14T17:23:29.880 回答
0

在 myapp/routing 中使用绝对路径导入您的应用程序时,请确保将其导入如下:

导入 myapp.routing

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            myapp.routing.websocket_urlpatterns
        )
    ),
})

它可能会在 PyCharm 中向您发出错误警告,但您将拥有工作的 Django 频道。我将它作为错误报告给 PyCharm。我希望没有其他人会像我一样花 3-4 个小时在上面)

于 2020-06-22T06:19:08.793 回答
0

我也遇到了同样的问题,我尽一切努力解决它,创建另一个虚拟环境并安装旧版本的 Django,但是在使用了 2 天的硬件后,我意识到我的 consumer.py 文件丢失了,在 consumer's 中只有一个 's' ' 然后我还在我的 routing.py 文件中更正了。可能这可能是您的问题,也请先检查所有文件名。

于 2019-09-26T04:54:36.690 回答
0

我通过以下方式解决了我的问题:

  • python manage.py 迁移
  • python manage.py makemigrations
  • python manage.py 迁移

还要检查您是否将routing.py文件放在错误的目录中。它应该是“myproject/routing.py”

于 2020-01-19T12:03:19.070 回答
0

我在 asgi.py 文件中编写了以下代码,websocket_urlpatterns 是从 routing.py 文件中导入的。这对我有用。

import os

from django.core.asgi import get_asgi_application

from channels.routing import ProtocolTypeRouter,URLRouter
from channels.auth import AuthMiddlewareStack
from .routing import websocket_urlpatterns


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



application = ProtocolTypeRouter({
    'http': get_asgi_application(),
    'websocket': AuthMiddlewareStack(URLRouter(websocket_urlpatterns))
})
于 2021-11-08T17:29:56.803 回答