Ошибка подключения Google AppEngine Django к экземпляру SQL 2-го поколения? - PullRequest
0 голосов
/ 31 октября 2019

Я хочу перенести свой сайт из экземпляра 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 

Мне нужна ваша помощь, пожалуйста.

Версия Django1.5 очень старое


Я обнаружил ошибку, ДВИГАТЕЛЬ неправильный, я заменил его на 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]
}

, но он все еще не работает, теперь он говорит, чтонужен ключ INSTANCE, затем я заменяю HOST на INSTANCE:

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 нет проблем.

1 Ответ

1 голос
/ 01 ноября 2019

Библиотека rdbms не будет работать с обновленным экземпляром SQL второго поколения Cloud, как указано в документации . Чтобы подключиться к вашему экземпляру Sencond Generation Cloud SQL к стандартному приложению App Engine, убедитесь, что у вашей учетной записи службы есть правильные разрешения, и используйте сокет домена Unix. Всю соответствующую информацию можно найти здесь .

...