【问题标题】:【Django×Google App Engine】No module named 'MySQLdb' when deploying【Django×Google App Engine】部署时没有名为“MySQLdb”的模块
【发布时间】:2020-01-18 13:39:03
【问题描述】:

我在设置 GitHub 源 ↓

https://github.com/priyankavergadia/Django-Dialogflow-GoogleVisionAPI

但是我在 [将应用部署到 App Engine 标准环境] 阶段遇到了麻烦。 一目了然部署已经做好。但是我在尝试访问webservice,所以出现了[502 Bad Gateway]。

  • 在本地环境下(运行 python manage.py runserver),这个程序运行良好。

请给我一些建议。

我的环境:

  • Windows10
  • Python 3.7.3(默认,2019 年 3 月 27 日,17:13:21)[MSC v.1915 64 位 (AMD64)] :: Anaconda, Inc. on win32
  • django 2.2.4
  • MySQL第二代5.7
  • mysql django

我搜索并尝试:

  1. 安装 mysqlclient 并卸载 PyMySQL
  2. 以各种模式重写 [import ~]part...

下面 Django setting.py 中的描述

# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

# Install PyMySQL as mysqlclient/MySQLdb to use Django's mysqlclient adapter
# See https://docs.djangoproject.com/en/2.1/ref/databases/#mysql-db-api-drivers
# for more information
import MySQLdb as sql# noqa: 402

# [START db_setup]
if os.getenv('GAE_APPLICATION', None):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/michatbot-250809:us-central1:polls-instance2',
            'USER': 'test',
            'PASSWORD': '',
            'NAME': 'polls',
        }
    }
else:
    # Running locally so connect to either a local MySQL instance or connect to
    # Cloud SQL via the proxy. To start the proxy via command line:

    #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
    #
    # See https://cloud.google.com/sql/docs/mysql-connect-proxy
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'NAME': 'polls',
            'USER': 'test',
            'PASSWORD': '',
        }
    }
# [END db_setup]

或者登录下面的 Google App Engine

   textPayload: "Traceback (most recent call last):
  File "/env/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/env/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 104, in init_process
    super(ThreadWorker, self).init_process()
  File "/env/lib/python3.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
    self.load_wsgi()
  File "/env/lib/python3.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/env/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
    return self.load_wsgiapp()
  File "/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/env/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app
    __import__(module)
  File "/srv/main.py", line 1, in <module>
    from mysite.wsgi import application
  File "/srv/mysite/wsgi.py", line 16, in <module>
    application = get_wsgi_application()
  File "/env/lib/python3.7/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
    django.setup(set_prefix=False)
  File "/env/lib/python3.7/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/env/lib/python3.7/site-packages/django/conf/__init__.py", line 57, in __getattr__
    self._setup(name)
  File "/env/lib/python3.7/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/env/lib/python3.7/site-packages/django/conf/__init__.py", line 107, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/opt/python3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/srv/mysite/settings.py", line 82, in <module>
    import MySQLdb as sql  # noqa: 402
ModuleNotFoundError: No module named 'MySQLdb'"

【问题讨论】:

    标签: django google-app-engine dialogflow-es


    【解决方案1】:

    根据您的 SO 和软件版本,社区在两个线程中找到了解决此错误的几种方法。您可以参考这些threadssecond onethis one,它们讨论了有关在 Windows 上使用 Python 3 连接 MySQL 的更多信息。

    确保遵循 GAE 标准中关于 Python 3.7 的documentation。此外,GAE 对使用 Django 有一些特定的支持,我建议通过 Django Support documentationDjango App example

    【讨论】:

    • 您能回复我真是太好了。我认为我现在无法解决这个问题。我会阅读你告诉我的文件并再次挑战。谢谢!
    猜你喜欢
    • 2016-12-19
    • 2019-01-30
    • 2015-09-02
    • 2015-04-24
    • 2018-08-05
    • 1970-01-01
    • 2018-12-05
    • 2012-09-28
    • 2021-07-05
    相关资源
    最近更新 更多