python - cloudsql 数据库与 django on 'new' 灵活的谷歌应用引擎

标签 python django google-app-engine google-cloud-platform google-cloud-sql

我正在使用 cloudsql 和“新的”灵活环境构建一个 django (1.9) 应用程序。我有同样的错误: Django on Google AppEngine with CloudSQL: How to connect database (Error 2002, Can't connect to local MySQL server..)

但是,在该线程中,他们引用了较旧的文档并解释了将数据库键 HOST 以以下格式放置:

DATABASES = {
   'default': {
      'ENGINE': 'django.db.backends.mysql',
      'HOST': '/cloudsql/myapp-test01:myapp-db-test01',
      'NAME': 'test01',
      'USER': 'test01',
    }

而在 documentation for running django on the 'flexible' environment , 它被解释为向世界开放你的数据库 (0.0.0.0/0) 并使用格式:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '<your-database-name>',
        'USER': '<your-database-user>',
        'PASSWORD': '<your-database-password>',
        'HOST': '<your-database-host>',
        'PORT': '3306',
        }
    }

CloudSQL 给出的 IP 地址大概在哪里。

请在此处查看文档:https://cloud.google.com/python/django/flexible-environment

请注意“灵活环境”,它似乎明显不同(但我不知道为什么)。

我正在写,因为当我从 IP 地址格式更改为 /cloudsq/... 格式时,我得到了错误

OperationalError: (2002, "Can't connect to local MySQL server through socket '/cloudsql/desgn-test-01:db-test-01' (2)")

非常感谢任何建议。谷歌似乎不可能真的希望我们让数据库对 0.0.0.0 开放,在文档中他们甚至说这只是为了测试,但没有提供进一步的信息。

我还应该提一下,我在我的 django 配置中使用了两个数据库,“默认”数据库是一个 sqlite 数据库(网站的这一部分工作正常)。当我尝试连接到使用云 sql 参数的应用程序时出现错误。这仅在部署时发生,本地一切正常。

最佳答案

我已经为 github 上的文档做了一个 PR,但是为了将我的 DEBUG 标志从 True 更改为 False 如下所述。

请注意,似乎一旦您更改了 DEBUG 标志,GAE 就要求您的 Cloud SQL 数据库使用 /cloudsql/ 套接字连接。

另外,我错过了关于 ALLOWED_HOSTS 的非常关键的信息,它应该包括 .appspot.com

制作

一旦您准备好在生产环境中提供您的内容,有几个 配置所需的更改。最显着的变化是:

  • 将“.appspot.com”添加到您的ALLOWED_HOSTS
  • 在 settings.py 文件中将 DEBUG 变量更改为 False
  • 如果您使用的是 Cloud SQL 数据库 例如,为了改变 DEBUG = True DEBUG = False 您需要正确配置数据库。看 指示 here并 确保更改您的 app.yaml 文件以及您的 HOSTDATABASES 对象。

关于python - cloudsql 数据库与 django on 'new' 灵活的谷歌应用引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39034250/

相关文章:

python - 在没有 HTML 的情况下在 GAE 上提供 index.py?

python - 图像旋转后如何获得新的坐标?

python - 找到两个字典键之间的重叠并从两个字典值创建一个新字典

python - 如何根据不同的列用 NA 填充名称

python - 如何使用自定义用户模型和自定义注销 View 从 Django 注销?

python - 以 Root 身份执行 Python 脚本(seteuid 与 c-wrapper)

python - Django Rest Framework : One URL for POST, 同一 APIView 上的 GET 的一个 URL

Python 2.7 和 Appengine ő/ű 字符显示为 '?'

Python: "...".encode ("utf8") 修复了什么?

python - API 调用在 GAE 上的服务器端非常慢,但在浏览器端却很快