谷歌应用引擎+python(django)部署错误:加载MySQLdb模块时出错
Posted
技术标签:
【中文标题】谷歌应用引擎+python(django)部署错误:加载MySQLdb模块时出错【英文标题】:Google app engine + python (django) deployment error: Error loading MySQLdb module 【发布时间】:2012-12-03 06:48:51 【问题描述】:我正在 Google App Engine 上创建一个应用程序。我正在使用 Django 1.4 和 Python 2.7。在本地主机上一切正常。但是部署后它没有运行,我一直在管理日志上得到这个:
2012-12-15 15:02:41.870
/base/python27_runtime/python27_lib/versions/1/lib/cacerts/urlfetch_cacerts.txt missing; without this urlfetch will not be able to validate SSL certificates.
W 2012-12-15 15:02:41.870
No ssl package found. urlfetch will not be able to validate SSL certificates.
E 2012-12-15 15:02:46.086
Traceback (most recent call last):
File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 196, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 266, in _LoadHandler
__import__(cumulative_path)
File "/base/data/home/apps/s~cloudwallforever/1.363864476397206865/djangoappengine/main/__init__.py", line 28, in <module>
setup_env()
File "/base/data/home/apps/s~cloudwallforever/1.363864476397206865/djangoappengine/boot.py", line 82, in setup_env
setup_logging()
File "/base/data/home/apps/s~cloudwallforever/1.363864476397206865/djangoappengine/boot.py", line 130, in setup_logging
if not settings.DEBUG:
File "/base/data/home/apps/s~cloudwallforever/1.363864476397206865/django/utils/functional.py", line 276, in __getattr__
self._setup()
File "/base/data/home/apps/s~cloudwallforever/1.363864476397206865/django/conf/__init__.py", line 42, in _setup
self._wrapped = Settings(settings_module)
File "/base/data/home/apps/s~cloudwallforever/1.363864476397206865/django/conf/__init__.py", line 87, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/base/data/home/apps/s~cloudwallforever/1.363864476397206865/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/base/data/home/apps/s~cloudwallforever/1.363864476397206865/settings.py", line 6, in <module>
import django.db.backends.mysql.base
File "/base/data/home/apps/s~cloudwallforever/1.363864476397206865/django/db/backends/mysql/base.py", line 14, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb
任何想法为什么会发生?
【问题讨论】:
您知道不能在 App Engine 上使用 MySql 吗?至少不是在 App Engine 本身上,您可以在其他地方使用 mysql 服务器。 谢谢,我忘了从 MYSQL 中删除一个导入。 【参考方案1】:如果将以下内容添加到您的 app.yaml 后仍无法正常工作:
libraries:
- name: MySQLdb
version: "latest"
...然后采取以下步骤:
-
确保在 Mac 上安装了 MySQLdb
pip install mysql-python
确保 GAE 开发服务器指向您的 virtualenv/pip'd python 2.7 安装与 Mac/*nix 的默认版本,因为 pip 可能没有安装它。我通过更新 GAE 开发服务器解决了Can't find module: MySQLdb
以使用:/usr/local/bin/python2.7
例如在GAE devserver preferences for Python Path
注意:可以通过应用程序菜单访问首选项:
如果您使用的是 Windows:请查看File > Preferences...
如果您使用的是 Mac,请查看GoogleAppengineLauncher > Preferences...
【讨论】:
GAE 开发服务器首选项窗格在哪里? 它们在应用程序菜单下。我已经编辑了帖子以澄清这一点! GoogeAppEngineLauncher 是命令行工具还是有实际的 GUI?我只记得安装了 Google Cloud SDK 来设置 GAE。【参考方案2】:“Django 支持”文档提示了解决方案,但没有明确说明:
由于标准的 django.db.backends.mysql 后端内部使用 MySQLdb,app.yaml 必须在库列表中引用 MySQLdb。
将以下内容添加到app.yaml
似乎可以修复 ImportError:
libraries:
- name: MySQLdb
version: "latest"
请注意,MySQLdb 当前未包含在available third party libraries 的列表中。我一时兴起尝试了它,它似乎已经为我解决了这个问题,YMMV.enter link description here
【讨论】:
P.S 我知道 OP 不打算在 AppEngine 上使用 MySQL,但使用 Cloud SQL,现在这是受支持的配置(目前在预览版中)。这个 SO 问题是“appengine ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb”的热门 Google 搜索结果,因此希望此解决方案对实际尝试在 AppEngine 上使用 MySQLdb 的其他人有用。 这并没有解决我的问题。我的 GAE 开发服务器上仍然出现ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb
错误。我试过latest
和1.2.5
。【参考方案3】:
正如Cloud SQL docs 明确指出的那样,您应该使用''google.appengine.ext.django.backends.rdbms'
作为您的数据库引擎设置。
【讨论】:
只是为了避免混淆其他人-这不是开发服务器的设置-developers.google.com/appengine/docs/python/cloud-sql/django developers.google.com/appengine/docs/python/cloud-sql/… 说django.db.backends.mysql
用于生产以上是关于谷歌应用引擎+python(django)部署错误:加载MySQLdb模块时出错的主要内容,如果未能解决你的问题,请参考以下文章