我如何将旧的Django Google App Engine应用程序升级到第二代Cloud SQL实例?

问题描述 投票:1回答:1

我有5年前编写的Django应用程序,该应用程序已在Google App Engine上成功运行-直到上个月Google升级到Second Generation Cloud SQL。

当前,我有一个settings.py文件,其中包含一个如下所示的数据库定义:

DATABASES = {
    'default': {
        'ENGINE': 'google.appengine.ext.django.backends.rdbms',
        'INSTANCE': 'my-project-name:my-db-instance',
        'NAME': 'my-db-name',
    },

Google的upgrade guide,告诉我,连接名称需要从'my-project-name:my-db-instance'更改为'my-project-name:my-region:my-db-instance'。这很简单。改变这个导致我得到错误

/ login /的内部错误

(0,u'无权访问实例:my-project-name:my-region:my-db-instance')

根据this question,我需要在实例名称中添加前缀'/ cloudsql /'。因此,我将其(和ENGINE规范)更改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'INSTANCE': '/cloudsql/my-project-name:my-region:my-db-instance',
        'NAME': 'my-db-name',
        'USER' : 'root',
        'PASSWORD': '******************',
    },

我将修改后的文件上传到Google(使用gcloud app deploy)。这次我得到了一个完全不同的错误屏幕,显示:

错误:服务器错误

服务器遇到错误,无法完成您的请求。

请在30秒内重试。

当我查看日志时,看到:

配置不正确:加载MySQLdb模块时出错:未命名模块MySQLdb

Daniel Ocandothis question中指出,“ rdbms库不适用于升级的第二代Cloud SQL实例”。现在需要通过Unix域套接字建立与数据库的连接。

Google提供了相关文档和示例。但是,我认为Google的instructions并不是很有帮助。为了连接Python应用程序,他们提供了以下示例代码:

main.py:
db = sqlalchemy.create_engine(
    sqlalchemy.engine.url.URL(
        drivername="mysql+pymysql",
        username=db_user,
        password=db_pass,
        database=db_name,
        query={"unix_socket": "/cloudsql/{}".format(cloud_sql_connection_name)},
    ),
)

我的应用程序没有main.py文件,所以我真的不确定将代码放在哪里。我已经在GitHub上查看了完整的示例代码,但是对于需要在settings.py文件或应用程序中的其他地方进行哪些更改,我并不明智。

[我的问题是:我真的必须走这条路(转向使用SQLalchemy库),还是可以仅通过在我的settings.py中进行一些更改就可以升级Django应用程序以使其与第二代Google Cloud SQL实例一起使用?文件?而且,如果是这样,会有什么变化?

我的应用程序使用Django 1.4,Python 2.7,但我没有使用Google建议的Flask框架。

5年前,我学会了纯粹是出于编写此应用程序的目的而使用Django,但此后我一直没有使用它-因此,我几乎忘记了我对Django和Python的了解。

python django google-app-engine google-cloud-platform google-cloud-sql
1个回答
1
投票

开始之前,这里有一些注意事项:不再支持Django 1.4和Python 2.7,因此此配置可能有效,也可能无效。

您走在正确的轨道上,直到您介绍了SQLAlchemy指令的那一部分。这些不是Django配置。只要完成以下步骤,您就应该能够保留当前的DATABASES语法:

  • 确保将设置添加到app.yamlallow your new database
  • 确保您已设置App Engine服务帐户的Cloud SQL Client(首选)权限。
  • 确保您具有mysqlclient作为Python依赖项。

Django on App Engine Flex guide使用PostgreSQL,但确实包含一些应该有用的MySQL specific suggestions。那里还有示例DATABASE配置。

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.