我正在尝试在标准Python37环境中的Google App Engine上部署Django应用程序。我已经在Flexible环境中运行了一个很好的版本,但是我正在创建一个要在Standard env中运行的登台版本。
当我部署并访问该应用程序时,出现500错误。在日志中查看,我可以看到一些有关工作进程异常的消息。我收到错误消息:
ModuleNotFoundError:没有名为“ main”的模块
这是错误的堆栈跟踪:
回溯(最近通话最近一次):
spawn_worker中的文件“ /env/lib/python3.7/site-packages/gunicorn/arbiter.py”,第583行 worker.init_process()
init_process中的文件“ /env/lib/python3.7/site-packages/gunicorn/workers/gthread.py”,第104行 超级(ThreadWorker,self).init_process()
init_process中的文件“ /env/lib/python3.7/site-packages/gunicorn/workers/base.py”,第129行 self.load_wsgi()
文件“ /env/lib/python3.7/site-packages/gunicorn/workers/base.py”,行138,位于load_wsgi中 self.wsgi = self.app.wsgi()
wsgi中的文件“ /env/lib/python3.7/site-packages/gunicorn/app/base.py”,第67行 self.callable = self.load()
文件“ /env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py”,第52行,已加载 返回self.load_wsgiapp()
load_wsgiapp中的文件“ /env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py”,第41行 返回util.import_app(self.app_uri)
import_app中的文件“ /env/lib/python3.7/site-packages/gunicorn/util.py”,第350行 导入(模块)
ModuleNotFoundError:没有名为“ main”的模块
自从Django为我创建my_site/wsgi.py
以来,我还没有修改它,这里是:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_site.settings")
application = get_wsgi_application()
这是我的app.yaml
:
runtime: python37
env: standard
beta_settings:
cloud_sql_instances: project:us-west1:sql-instance
handlers:
- url: /static
static_dir: staticfiles/
- url: .*
secure: always
redirect_http_response_code: 301
script: my_site.wsgi.application
env_variables:
# vars
这与https://cloud.google.com/python/django/appengine中的app.yaml
非常接近。
我还尝试将script
更改为auto
,如下所示:https://cloud.google.com/appengine/docs/standard/python3/config/appref,但仍然遇到相同的错误。
我已经看过这个问题:Django - gunicorn on App Engine. Error: 'No Module Named my_project',而my_site
确实有下划线,但不是驼峰式的。
我不确定此错误的根源是什么。任何想法将不胜感激。
答案 0 :(得分:8)
您可能需要将entrypoint
添加到您的app.yaml
runtime: python37
entrypoint: gunicorn -b :8080 my_site.wsgi
...(remaining parts of your app.yaml)
参考: https://cloud.google.com/appengine/docs/standard/python3/runtime
答案 1 :(得分:0)
您也可以在没有入口点的情况下部署它,但是您的应用程序对象必须位于根目录的main.py
文件中。
检查此类部署here的示例说明