Django 在 Google App Engine 上出现“502 Bad Gateway”错误
Posted
技术标签:
【中文标题】Django 在 Google App Engine 上出现“502 Bad Gateway”错误【英文标题】:Django gives "502 Bad Gateway" error on Google App Engine 【发布时间】:2021-03-31 11:09:45 【问题描述】:我正在尝试在标准 Python3.8 环境中的 Google App Engine 上部署 Django 应用程序。我按照this document 中的所有步骤进行操作。应用程序在我的本地使用谷歌云数据库运行良好。但是我收到502 Bad Gateway
错误访问Web Url。我发现了很多不同的问题,但是技术正在发生很大的变化,到目前为止,它们都没有帮助。最后,我今天遇到了this solution,但它说创建一个我在谷歌文档中从未见过的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)
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: 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 文件夹中有这 2 个库。我从 env 文件夹中手动移动了它们。
django
mysqldb
【问题讨论】:
您的入口点似乎有问题,您能否检查this 或this 是否有帮助? 我实际上尝试了第一个链接,但没有成功,但我会继续尝试不同版本的第一个链接。顺便说一句,即使在 app.yaml 中更改了行之后,也必须像往常一样进行部署,或者是否有其他方法可以仅部署更改。 不可能只上传更改,您必须在进行更改时上传和部署所有内容 【参考方案1】:应用程序抱怨找不到main
模块,您mentioned 的文档与您的问题不同,您还没有达到使用存储库的目的。
关于您的具体问题。正如documentation中提到的:
运行时通过运行您在 app.yaml 文件中的入口点字段。
在这种情况下,您的 app.yaml
没有指定入口点,发生这种情况时,您必须确保满足以下要求:
如果您的应用满足以下要求,App Engine 将启动 如果您不指定 入口点字段:
您的应用程序目录的根目录包含一个 main.py 文件,其中包含一个 名为 app 的 WSGI 兼容对象。
您的应用不包含 Pipfile 或 Pipfile.lock 文件。
在这种情况下,您的应用程序缺少 main.py
文件,这是 App Engine 抱怨的错误。有多种方法可以避免此错误(例如指定entrypoint)。在这种情况下,我建议在您应用的 root 文件夹中创建一个名为 main.py
的文件,并包含下一个:
from mysite.wsgi import application
app = application
可以找到包含运行 Django 应用程序所需结构的示例here
【讨论】:
非常感谢@Emmanuel,它有帮助。顺便说一句,我不小心在 GitHub 上创建了一个公共存储库,其中保存了我所有的密码,这导致我的 google 引擎应用程序遭到破坏。我需要找到一种方法在单独的文件中加载密钥和密码。 我建议您使用gitifnore 文件,这样您就可以避免将这些文件上传到github以上是关于Django 在 Google App Engine 上出现“502 Bad Gateway”错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django/Google App Engine 中制作日志颜色?
正在加载 Genymotion 库 Genymotion 目录:/Applications/Genymotion.app/Contents/MacOS 尝试初始化引擎 Initialize Engin
在 Google App Engine 中将 docx 文件呈现为 django 模板
来自 Google App Engine 的 Django 1.5.1 支持