Django Google App Engine:502 Bad Gateway,已安装的包无法识别
Posted
技术标签:
【中文标题】Django Google App Engine:502 Bad Gateway,已安装的包无法识别【英文标题】:Django Google App Engine: 502 Bad Gateway, already installed package not recognized 【发布时间】:2021-06-06 07:50:47 【问题描述】:我正在 Google App Engine 中部署 Django。
我收到 502 Bad Gateway 并在日志中收到以下错误:
2021-03-08 12:08:18 default[20210308t130512] Traceback(最近一次调用最后):文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/ arbiter.py”,第 583 行,在 spawn_worker worker.init_process() 文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/workers/gthread.py”,第 92 行,在 init_process super().init_process() 文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/workers/base.py”,第 119 行,在 init_process self.load_wsgi( ) 文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/workers/base.py”,第 144 行,在 load_wsgi self.wsgi = self.app.wsgi() 文件中“/layers/google.python.pip/pip/lib/python3.9/site-packages/gunicorn/app/base.py”,第 67 行,在 wsgi self.callable = self.load() 文件中“/layers/ google.python.pip/pip/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py”,第 49 行,在加载返回 self.load_wsgiapp() 文件“/layers/google.python.pip/pip /lib/python3 .9/site-packages/gunicorn/app/wsgiapp.py”,第 39 行,在 load_wsgiapp 返回 util.import_app(self.app_uri) 文件“/layers/google.python.pip/pip/lib/python3.9/site -packages/gunicorn/util.py”,第 358 行,在 import_app mod = importlib.import_module(module) 文件“/opt/python3.9/lib/python3.9/importlib/init.py ",第 127 行,在 import_module 中返回 _bootstrap._gcd_import(name[level:],包,级别) 文件"",第 1030 行,在 _gcd_import 文件中"",第 1007 行,在 _find_and_load 文件中"",第 986 行,在 _find_and_load_unlocked 文件中"",第 680 行,在 _load_unlocked 文件中 "",第 790 行,在 exec_module 文件中 "",第 228 行,在 _call_with_frames_removed 文件中 "/srv/main.py",第 1 行,从 django_project.wsgi 导入应用程序文件 "/srv /django_project/wsgi.py”,第 16 行,在 application = get_wsgi_application() 文件中“/layers/google.python.pip/pip/lib/python3.9/site-packages/django/core/wsgi.py”,行12、在get_wsgi_application django.s etup(set_prefix=False) 文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/django/init.py”,第 19 行,在 setup configure_logging( settings.LOGGING_CONFIG, settings.LOGGING) 文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/django/conf/init.py”,第 82 行,在 getattr self._setup(name) 文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/django/conf/init .py”,第 69 行,在 _setup self._wrapped = Settings(settings_module) 文件“/layers/google.python.pip/pip/lib/python3.9/site-packages/django/conf/init.py”,第 170 行,在 init mod = importlib.import_module(self.SETTINGS_MODULE) 文件“/opt/python3.9/lib/python3.9/importlib/init.py”,第 127 行,在 import_module 返回 _bootstrap._gcd_import(name[level:], package, level) 文件“/srv/django_project/settings.py”,第 84 行,在 import pymysql # noqa: 402 ModuleNotFoundError: 没有名为“pymysql”的模块
问题是我已经安装了pymysql
,实际上如果我运行pip3 install pymysql
,我得到Requirement already satisfied: ...
这是为什么呢? 提前致谢!
编辑:
这里是requirements.txt
:
asgiref==3.3.1
attrs==20.3.0
Automat==20.2.0
certifi==2020.12.5
cffi==1.14.4
chardet==4.0.0
constantly==15.1.0
cryptography==3.4.1
cssselect==1.1.0
Django==3.1.6
django-phonenumber-field==5.0.0
django-widget-tweaks==1.4.8
hyperlink==21.0.0
idna==2.10
incremental==17.5.0
instaloader==4.6.1
itemadapter==0.2.0
itemloaders==1.0.4
jmespath==0.10.0
jsonfield==3.1.0
lxml==4.6.2
parsel==1.6.0
phonenumberslite==8.12.18
progress==1.5
Protego==0.1.16
pyasn1==0.4.8
pyasn1-modules==0.2.8
pycparser==2.20
PyDispatcher==2.0.5
PyHamcrest==2.0.2
pyOpenSSL==20.0.1
pytz==2021.1
queuelib==1.5.0
requests==2.25.1
schedule==0.6.0
Scrapy==2.4.1
semantic-version==2.8.5
service-identity==18.1.0
setuptools-rust==0.11.6
six==1.15.0
sqlparse==0.4.1
toml==0.10.2
urllib3==1.26.3
w3lib==1.22.0
zope.interface==5.2.0
【问题讨论】:
requriements.txt 中有什么内容? @gaefan 完成,看看 【参考方案1】:如果您在本地计算机上运行pip3 install pymysql
,这并不意味着在您部署应用程序时会打包此模块。事实上,GAE 会尝试在构建时使用您的 requirements.txt
文件安装所有内容,因此您是否在 PC 中安装所有内容都没有关系,因为 GAE 不会使用您在本地拥有的内容(谈论使用 pip
安装的软件包)。
检查您的requirements.txt
文件我没有看到包PyMySQL
已添加。您应该将其添加到该文件并尝试再次部署。
【讨论】:
谢谢!但那是怎么回事?我的意思是,重要的是我在虚拟环境中安装了软件包,以便在我部署它时部署所有软件包吗? App Engine 将use the packages in the requirements.txt。建议使用 venv,以便在本地运行应用程序时将系统包与“requirements.txt”包隔离。以上是关于Django Google App Engine:502 Bad Gateway,已安装的包无法识别的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django/Google App Engine 中制作日志颜色?
Google App Engine 中的 Django 模板语法错误
Google App Engine 渲染和 Django 表单
Google App Engine 中的 Django 自定义模板标签