使用通道2运行服务器时无法导入ASGI_APPLICATION模块

时间:2018-08-01 13:26:18

标签: python django django-channels

我已经按照频道指南进行操作,但是在运行这些错误抛出时

软件包的版本为 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'

14 个答案:

答案 0 :(得分:4)

就我而言,在其他文件中导入错误。

您应该做的是

python manage.py shell
from mysite.routing import application

查看其产生的确切错误,然后尝试解决该问题

答案 1 :(得分:1)

只是改变

  

ASGI_APPLICATION = mysite.routing.application

  

ASGI_APPLICATION =“路由应用程序”

答案 2 :(得分:1)

我也面临着同样的问题。
确保:
=> routing.py文件应位于项目根文件夹(即django服务器,该文件夹具有settings.py,wsgi.py,..)
=>在settings.py中,包括ASGI_APPLICATION =“ yourprojectrootname.routing.application”

=>有时,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中的编码。调试并解决问题。

=>在其他情况下,这可能是版本问题,降级为channel == 2.1.2可行

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

如渠道文档所述:

  

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

答案 5 :(得分:0)

在我的情况下,consumer.py中有未解决的软件包,请检查频道.py文件中是否有未解决的软件包

答案 6 :(得分:0)

我也遇到了同样的问题,我需要尽一切努力来解决它,创建了另一个虚拟环境并安装了旧版本的Django,但是经过两天的硬件安装,我才意识到我的consumers.py文件丢失了,只是一个“在消费者的手中”,此后我也在我的routing.py文件中进行了更正。可能是您的问题,也请先检查所有文件名。

答案 7 :(得分:0)

万一有人出现这种情况。请记住: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
        )
    ),
})

myapp / routing.py

from django.urls import path
from . import consumers

websocket_urlpatterns = [
    path('chatroompage', consumers.ChatConsumer),
]

答案 8 :(得分:0)

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

  • python manage.py migration
  • python manage.py makemigrations
  • python manage.py migration

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

答案 9 :(得分:0)

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

from channels.auth import AuthMiddlewareStack

问题是版本兼容性。然后,我将requirements.txt升级到了下面,它运行起来很安静。

channels==2.4.0
channels-redis==2.4.2
daphne==2.5.0

答案 10 :(得分: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个小时)

答案 11 :(得分:0)

您应该将routing.py放在mysite/mysite/内而不是mysite/内,否则您将无法在设置文件中使用ASGI_APPLICATION = mysite.routing.application并收到错误消息。

答案 12 :(得分:0)

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

ASGI_APPLICATION

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

答案 13 :(得分:0)

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

<project_name>.routing.application

routing.application

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