Search code examples
djangopostgresqlgoogle-app-enginegoogle-cloud-sql

Django - App Engine - Cloud SQL (PostgreSQL) - OperationalError: could not connect to server: Connection refused


I have Django deployed to App Engine that's connected to Cloud SQL (PostgreSQL) instance. I keep getting the following errors:

OperationalError: could not connect to server: Connection timed out 

and

OperationalError: could not connect to server: Connection refused

app.yaml

# [START django_app]
runtime: python37
service: prestige-worldwide

handlers:
# This configures Google App Engine to serve the files in the app's static
# directory.
- url: /static
  static_dir: static/
# This handler routes all requests not caught above to your main app. It is
# required when static routes are defined, but can be omitted (along with
# the entire handlers section) when there are no static files defined.
- url: /.*
  script: auto
# [END django_app]

settings.py - DATABASE configuration

ALLOWED_HOSTS = ['app-engine url','127.0.0.1']

DATABASES = {
    'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2',
                'NAME': 'postgres',
                'USER': 'postgres',
                'PASSWORD': 'admin',
                'HOST': 'instance public ip address',
                'PORT': 'ip address host',}}

It works fine locally with Cloud SQL, but doesn't work when deployed to App Engine.


Solution

  • Configuring DB like this solved the issue

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'postgres',
            'USER': 'postgres',
            'PASSWORD': 'admin',
        }
    }
    DATABASES['default']['HOST'] = '/cloudsql/instance-name'
    if os.getenv('GAE_INSTANCE'):
        pass
    else:
        DATABASES['default']['HOST'] = 'instance public ip address'