繁体   English   中英

将 Google AppEngine Django 与 SQL 第二代实例连接时出错?

[英]Error connecting Google AppEngine Django with SQL 2nd generation instance?

我想将我的站点从第一代云迁移到第二代云 SQL 实例,这是旧配置:

DATABASES['[DATABASE_NAME]'] = {
    'ENGINE': 'google.appengine.ext.django.backends.rdbms',
    'INSTANCE': '[PROJECT_ID]:[INSTANCE_ID_1stGEN]',
    'NAME': '[DATABASE_NAME]',
    'USER': [MY_USER],
    'PASSWORD': [MY_PASSWORD],
}

这很好用,现在我正在尝试使用以下代码:

DATABASES['[DATABASE_NAME]'] = {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '/cloudsql/[PROJECT_NAME]:[REGION]:[INSTANCE_ID]',
        'NAME': '[DATABASE_NAME]',
        'USER': [MY_USER],
        'PASSWORD': [MY_PASSWORD]
}

而这段代码

DATABASES['[DATABASE_NAME]'] = {  # 2da gen no funciono error COUNT_ROWS
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
        'NAME': '[DATABASE_NAME]',
        'USER': [MY_USER],
        'PASSWORD': [MY_PASSWORD]
}

这是错误:

AttributeError at /
'module' object has no attribute 'FOUND_ROWS'
   /base/alloc/tmpfs/dynamic_runtimes/python27g/79cfdbb680326abd/python27/python27_lib/versions/third_party/django-1.5/django/db/backends/mysql/base.py in _cursor
            kwargs['client_flag'] = CLIENT.FOUND_ROWS 

我需要你的帮助,拜托。

Django 版本是 1.5 很旧


我发现一个错误,ENGINE错误,我将其替换为google.appengine.ext.django.backends.rdbms

DATABASES['[DATABASE_NAME]'] = {
        'ENGINE': 'google.appengine.ext.django.backends.rdbms',
        'HOST': '/cloudsql/[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
        'NAME': '[DATABASE_NAME]',
        'USER': [MY_USER],
        'PASSWORD': [MY_PASSWORD]
}

但它仍然失败,现在它说需要一个实例密钥,然后我用实例替换主机:

DATABASES['[DATABASE_NAME]'] = {
        'ENGINE': 'google.appengine.ext.django.backends.rdbms',
        'INSTANCE': '/cloudsql/[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
        'NAME': '[DATABASE_NAME]',
        'USER': [MY_USER],
        'PASSWORD': [MY_PASSWORD]
}

... 没有什么...

DATABASES['[DATABASE_NAME]'] = {
        'ENGINE': 'google.appengine.ext.django.backends.rdbms',
        'INSTANCE': '[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
        'NAME': '[DATABASE_NAME]',
        'USER': MY_USER,
        'PASSWORD':MY_PASSWORD
}

尝试这个,现在另一个错误:

InternalError at /
(0, u'Not authorized to access instance: [PROJECT_ID]:[REGION]:[INSTANCE_ID]')

/base/alloc/tmpfs/dynamic_runtimes/python27g/79cfdbb680326abd/python27/python27_lib/versions/1/google/storage/speckle/python/api/rdbms.py in MakeRequest
      request.request_id = self._idempotent_request_id
      response = self._MakeRetriableRequest(stub_method, request)
    else:
      response = self.MakeRequestImpl(stub_method, request)
    if (hasattr(response, 'sql_exception') and
        response.HasField('sql_exception')):
      raise _ToDbApiException(response.sql_exception) ...
    return response
  def _MakeRetriableRequest(self, stub_method, request):
    """Makes a retriable request.

添加 SSL/TSL 配置:

DATABASES['[DATABASE_NAME]'] = {
            'ENGINE': 'google.appengine.ext.django.backends.rdbms',
            'INSTANCE': '[PROJECT_ID]:[REGION]:[INSTANCE_ID]',
            'NAME': '[DATABASE_NAME]',
            'USER': [MY_USER],
            'PASSWORD': [MY_PASSWORD],
            'OPTIONS': {'ssl': {
                'key': '/servidor/[INSTANCE_ID]/client-key.pem',
                'cert': '/servidor/[INSTANCE_ID]/client-cert.pem',
                'ca': '/servidor/[INSTANCE_ID]/client-ca.pem',
            }}

我仍然得到同样的错误。

证书有效,使用 MySQL Workbench 没有问题。

文档所述,rdbms 库将无法与升级的第二代云 SQL 实例一起使用。 为了将您的第二代云 SQL 实例连接到您的 App Engine 标准应用程序,请确保您的服务帐户具有正确的权限并使用 Unix 域套接字。 所有相关信息都可以在这里找到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM