Google Cloud App Engine部署Django+Daphne应用无法加载求助
Django + Daphne部署GAE报错排查:ModuleNotFoundError: No module named 'trip_tracker_project'
问题描述
部署到Google Cloud App Engine的Django应用(搭配Daphne ASGI以支持WebSockets和WebRTC)无法加载,GAE日志中报错:
ModuleNotFoundError: No module named 'trip_tracker_project'
目录结构
- 主根目录(包含
manage.py):trip_tracker_project(本地路径:Desktop/trip_tracker_project) - 存放
settings.py的项目子目录:trip_tracker(本地路径:Desktop/trip_tracker_project/trip_tracker)
已尝试操作
- 移除根目录下的google-cloud-sdk
- 在app.yaml中添加
PYTHONPATH: "/app" - 修改asgi.py中的
os.environ.setdefault('DJANGO_SETTINGS_MODULE', ...),从'trip_tracker.settings'改为'trip_tracker_project.settings'
执行gcloud app deploy部署后,仍出现超时问题且报错相同,怀疑app.yaml的entrypoint配置存在问题,寻求排查方法。
相关配置
app.yaml
runtime: python310 instance_class: F2 entrypoint: daphne -u /tmp/daphne.sock trip_tracker.asgi:application automatic_scaling: target_cpu_utilization: 0.65 min_instances: 1 max_instances: 15 env_variables: DJANGO_SETTINGS_MODULE: "trip_tracker.settings" PYTHONPATH: "/app"
修改前的asgi.py
import os from django.core.asgi import get_asgi_application from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack import video_chat.routing os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'trip_tracker.settings') application = ProtocolTypeRouter({ "http": get_asgi_application(), "websocket": AuthMiddlewareStack( URLRouter( video_chat.routing.websocket_urlpatterns ) ), })
排查方案
1. 明确部署上下文的模块逻辑
GAE部署时,会将你执行gcloud app deploy的目录作为容器内的/app根目录。你本地是在trip_tracker_project目录下执行部署,因此容器内的/app就对应这个目录,trip_tracker_project本身不是一个Python模块——它是部署根目录,不要用它作为模块名来引用配置。
2. 统一配置文件的模块路径
- 将asgi.py改回原配置:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'trip_tracker.settings'),确保和app.yaml中的DJANGO_SETTINGS_MODULE值完全一致。 - 检查
trip_tracker目录下是否存在__init__.py文件(空文件即可),Python需要这个文件识别该目录为合法模块。
3. 验证entrypoint的正确性
当前entrypointdaphne -u /tmp/daphne.sock trip_tracker.asgi:application是正确的,前提是asgi.py确实在/app/trip_tracker目录下。如果本地目录结构符合要求,这个路径无需修改。
4. 检查依赖与PYTHONPATH
- 确保
requirements.txt中包含daphne、channels及Django相关依赖,GAE会自动安装这些包。 - 当前
PYTHONPATH: "/app"配置正确,无需额外添加子目录,因为/app作为根目录,其下的子模块(如trip_tracker、video_chat)会被Python自动识别。
5. 本地模拟部署环境测试
- 在本地执行
gcloud app run启动模拟服务,复现错误并排查。 - 或者设置本地PYTHONPATH为根目录路径,执行
daphne -u /tmp/daphne.sock trip_tracker.asgi:application,看是否出现相同报错,快速定位问题。
6. 检查其他模块的导入合法性
确认video_chat目录下同样存在__init__.py,且video_chat.routing模块能被正确导入。如果video_chat是独立的Django app,需确保它已添加到settings.py的INSTALLED_APPS中。
内容的提问来源于stack exchange,提问作者Raymond Christian
相关产品推荐
相关产品推荐

