You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生产环境部署Railway时Django+Daphne出现AppRegistryNotReady错误

Django+Channels部署Railway触发AppRegistryNotReady异常解决

本地运行正常的Django项目,用Channels(Daphne)实现的WebSocket功能也能正常工作,但部署到Railway后抛出django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet错误。已确认依赖包与requirements.txt一致,且创建了runtime.txt,仍无法定位问题。完整报错日志如下:

2023-10-04 19:10:30,487 INFO     /app/.env not found - if you're not configuring your environment separately, check this.
Traceback (most recent call last):
File "/opt/venv/bin/daphne", line 8, in <module>
sys.exit(CommandLineInterface.entrypoint())
File "/opt/venv/lib/python3.10/site-packages/daphne/cli.py", line 171, in entrypoint
cls().run(sys.argv[1:])
File "/opt/venv/lib/python3.10/site-packages/daphne/cli.py", line 233, in run
application = import_by_path(args.application)
File "/opt/venv/lib/python3.10/site-packages/daphne/utils.py", line 12, in import_by_path
target = importlib.import_module(module_path)
File "/root/.nix-profile/lib/python3.10/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 "/app/./project/asgi.py", line 1, in <module>
import notification.routing
File "/app/notification/routing.py", line 2, in <module>
from notification.consumer import NotificationConsumer
File "/app/notification/consumer.py", line 7, in <module>
from notification.models import Notification
File "/app/notification/models.py", line 3, in <module>
from posts.models import PublishedPost
File "/app/posts/models.py", line 2, in <module>
from django.contrib.auth.models import User
File "/opt/venv/lib/python3.10/site-packages/django/contrib/auth/models.py", line 3, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/opt/venv/lib/python3.10/site-packages/django/contrib/auth/base_user.py", line 49, in <module>
class AbstractBaseUser(models.Model):
File "/opt/venv/lib/python3.10/site-packages/django/db/models/base.py", line 127, in __new__
app_config = apps.get_containing_app_config(module)
File "/opt/venv/lib/python3.10/site-packages/django/apps/registry.py", line 260, in get_containing_app_config
self.check_apps_ready()
File "/opt/venv/lib/python3.10/site-packages/django/apps/registry.py", line 138, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

问题根源

从报错栈可以看出,asgi.py开头直接导入了notification.routing,而这个路由模块又逐级导入了Consumer、Model,此时Django的应用还没完成初始化加载,导致触发AppRegistryNotReady异常。本地环境可能因加载顺序不同未暴露这个问题,但部署到Railway时触发了提前导入的情况。

解决方案

  1. 调整asgi.py的加载顺序
    必须先完成Django应用的初始化,再导入任何会引用Model的模块。修改后的asgi.py示例:

    import os
    from django.core.asgi import get_asgi_application
    
    # 先设置Django环境并初始化应用
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
    django_asgi_app = get_asgi_application()
    
    # 初始化完成后再导入Channels路由
    from channels.routing import ProtocolTypeRouter, URLRouter
    import notification.routing
    
    application = ProtocolTypeRouter({
        "http": django_asgi_app,
        "websocket": URLRouter(
            notification.routing.websocket_urlpatterns
        ),
    })
    
  2. 验证Railway启动命令
    确保使用正确的Daphne启动命令,示例:

    daphne project.asgi:application --port $PORT --bind 0.0.0.0
    

    确认命令中的asgi模块路径正确,且Railway注入的$PORT环境变量被正确使用。

  3. 检查环境变量配置
    日志提示.env文件未找到,如果已经通过Railway平台配置了Django所需的环境变量(如SECRET_KEY、DATABASE_URL等),该提示可忽略;否则需确保所有必要环境变量已配置,避免因Settings加载失败导致应用初始化异常。

内容的提问来源于stack exchange,提问作者Ahmad Hashim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:43:23