部署Django项目至Google AppEngine:入口点配置问题求助
遇到这种路径问题太常见了,核心原因是你误解了GAE容器里的文件路径逻辑——GAE会把你部署的整个项目目录挂载到容器的/app路径下,所以你写的绝对路径/service根本不存在,这就是报错的根源。下面给你几个实用的解决方案:
方案1:直接通过模块路径指定WSGI应用
不需要移动任何文件,直接在app.yaml里配置gunicorn指向正确的WSGI模块(从项目根目录出发的完整模块路径):
entrypoint: gunicorn service.service_project.wsgi:application
这里的service.service_project.wsgi对应你的目录结构:service目录下的service-project文件夹(记得给这个文件夹加个空的__init__.py,让Python把它识别为可导入的模块),然后指向该文件夹里wsgi.py中的application对象。
方案2:调整根目录下的main.py来导入WSGI应用
如果更习惯用main.py作为入口,可以修改根目录的main.py内容,让它正确加载Django的WSGI应用:
import os import sys # 将service目录添加到Python的模块搜索路径 sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'service')) # 设置Django的配置模块 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'service_project.settings') from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
然后app.yaml里的入口点就可以保持简洁:
entrypoint: gunicorn main:application
方案3:修正--chdir的路径写法(可选,不推荐)
如果你一定要用--chdir参数,得用相对路径(相对于项目根目录,也就是容器里的/app):
entrypoint: gunicorn --chdir service service_project.wsgi:application
这里--chdir service会切换到/app/service目录,然后service_project.wsgi:application就是该目录下的模块路径。不过这种方式容易引发其他模块导入问题,不如前两种稳定。
最后提个小细节:确保service/service-project目录下有__init__.py(空文件就行);另外检查settings.py里的ALLOWED_HOSTS是否包含你的GAE域名(比如your-project-id.appspot.com),避免后续访问时出现403报错。
内容的提问来源于stack exchange,提问作者spimley

