繁体   English   中英

Django 在 Google App Engine 上出现“502 Bad Gateway”错误

[英]Django gives “502 Bad Gateway” error on Google App Engine

我正在尝试在标准 Python3.8 环境中的 Google App Engine 上部署 Django 应用程序。 我遵循了本文档中的所有步骤。 应用程序在我的本地使用谷歌云数据库运行良好。 但是,我在访问 Web Url 时收到502 Bad Gateway错误。 我发现了很多不同的问题,但技术正在发生很大变化,到目前为止,它们都没有帮助。 最后,我今天遇到了这个解决方案,但它说创建一个我在谷歌文档中从未见过的gcloud.py文件,这就是为什么我没有应用该解决方案但决定问你的原因。

访问页面时出现此错误

Traceback (most recent call last):
_find_and_load (<frozen importlib._bootstrap>)

这是错误的堆栈跟踪:

File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked: ModuleNotFoundError: No module named 'main'
at _find_and_load (<frozen importlib._bootstrap>:991)
at _gcd_import (<frozen importlib._bootstrap>:1014)
at import_module (/opt/python3.8/lib/python3.8/importlib/__init__.py:127)
at import_app (/layers/google.python.pip/pip/lib/python3.8/site-packages/gunicorn/util.py:358)
at load_wsgiapp (/layers/google.python.pip/pip/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py:39)
at load (/layers/google.python.pip/pip/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py:49)
at wsgi (/layers/google.python.pip/pip/lib/python3.8/site-packages/gunicorn/app/base.py:67)
at load_wsgi (/layers/google.python.pip/pip/lib/python3.8/site-packages/gunicorn/workers/base.py:144)
at init_process (/layers/google.python.pip/pip/lib/python3.8/site-packages/gunicorn/workers/base.py:119)
at init_process (/layers/google.python.pip/pip/lib/python3.8/site-packages/gunicorn/workers/gthread.py:92)
at spawn_worker (/layers/google.python.pip/pip/lib/python3.8/site-packages/gunicorn/arbiter.py:583)

我的站点/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()

这是我的应用程序。yaml

runtime: python38 
handlers:
# This configures Google App Engine to serve the files in the app's
# static directory.
- url: /static
 static_dir: static/
# This handler routes all requests not caught above to the main app. 
# It is required when static routes are defined, but can be omitted 
# (along with the entire handlers section) when there are no static 
# files defined.
- url: /.*
 script: auto

这是settings.py。 我尝试使用注释行,但它仍然给出相同的错误。

STATIC_URL = '/static/'
STATIC_ROOT = 'static'

# STATIC_ROOT = os.path.join(BASE_DIR, '/static/')
# STATICFILES_DIRS = (
#     os.path.join(BASE_DIR, 'static'),
# )
# MEDIA_URL = '/media/'
# MEDIA_ROOT = os.path.join(BASE_DIR, "media")

# STATICFILES_FINDERS = [
#    'django.contrib.staticfiles.finders.FileSystemFinder',
#    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# ]

appengine_config.py

from google.appengine.ext import vendor
vendor.add('lib')

我的 lib 文件夹中有这两个库。 我从 env 文件夹中手动移动了它们。

django
MySQLdb

该应用程序抱怨找不到main模块,您提到的文档与您的问题不同,您还没有达到使用存储库的地步。

关于你的具体问题。 文档中所述:

运行时通过运行您在 app.yaml 文件的入口点字段中指定的命令来启动您的应用程序。

在这种情况下,您的app.yaml没有指定入口点,发生这种情况时,您必须确保满足以下要求:

如果您的应用满足以下要求,且您未指定入口点字段,App Engine 将使用 gunicorn web 服务器启动您的应用:

app 目录的根目录包含一个 main.py 文件,其中包含一个与 WSGI 兼容的 object,名为 app。

您的应用不包含 Pipfile 或 Pipfile.lock 文件。

在这种情况下,您的应用程序缺少main.py文件,这是 App Engine 抱怨的错误。 有多种方法可以避免此错误(例如指定entrypoint )。 在这种情况下,我的建议是在应用程序的文件夹中创建一个名为main.py的文件,并包含以下内容:

from mysite.wsgi import application
app = application

可以在此处找到包含运行 Django 应用程序所需结构的示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM