Django Ошибка сервера Google App Engine 500 - PullRequest
1 голос
/ 24 октября 2019

Я развернул свое приложение Django в Google Cloud. Он работал нормально, когда я размещал его локально и на всех этапах, описанных в этом посте .

Возникает ошибка сервера (500), когда я пытаюсь просмотреть действующую ссылку.

Когда я включаю Debug в settings.py, это полный возврат. (Torque - это название моего проекта), а showroom - мое приложение.

Трассировка относится к атрибуту views (num_manufactureres), с которым у меня никогда не возникало проблем при локальном размещении.

OperationalError at /showroom/
(2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
Request Method: GET
Request URL:    https://torque-256805.appspot.com/showroom/
Django Version: 2.2.5
Exception Type: OperationalError
Exception Value:    
(2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
Exception Location: /env/lib/python3.7/site-packages/MySQLdb/connections.py in __init__, line 166
Python Executable:  /env/bin/python3.7
Python Version: 3.7.4
Python Path:    
['/srv',
 '/env/bin',
 '/opt/python3.7/lib/python37.zip',
 '/opt/python3.7/lib/python3.7',
 '/opt/python3.7/lib/python3.7/lib-dynload',
 '/env/lib/python3.7/site-packages']
Server time:    Thu, 24 Oct 2019 09:45:29 +0300
...

/env/lib/python3.7/site-packages/MySQLdb/__init__.py in Connect
    return Connection(*args, **kwargs) …
▶ Local vars
/env/lib/python3.7/site-packages/MySQLdb/connections.py in __init__
        super(Connection, self).__init__(*args, **kwargs2) …
▶ Local vars
...

    num_manufacturers = Manufacturer.objects.all().count() …
▶ Local vars

Я новичок в Google Cloud, поэтому не знаю, как начать отлаживать это.

Вот некоторые возможные проблемы:

  1. Экземпляр сервера, который я создал на cloud.google.com, использует europe-west3 в качестве региона. Но когда я развертывал, я думал, что он создал совершенно новый сервер, и выбрал europe-west6 как лучший вариант. (Близость, лучшая надежность и т. Д.)

  2. Я изменил настройки своего проекта settings.py для большей безопасности в соответствии с командой check --deploy Django.

Иначе я не могу думать ни о чем другом. Кто-нибудь может помочь?

1 Ответ

1 голос
/ 24 октября 2019

Проверьте этот пример Django в App Engine settings.py file:

if os.getenv('GAE_APPLICATION', None):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/[YOUR-CONNECTION-NAME]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
            'NAME': '[YOUR-DATABASE]',
        }
    }
else:
    # Running locally so connect to either a local MySQL instance or connect to
    # Cloud SQL via the proxy. To start the proxy via command line:
    #
    #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
    #
    # See https://cloud.google.com/sql/docs/mysql-connect-proxy
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'NAME': '[YOUR-DATABASE]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
        }
    }

Последнее, но не менее важное, если вы запускаете приложение локальноубедитесь, что у вас есть ALLOWED_HOSTS= ['localhost'], если ваш хост базы данных HOST='localhost', или вы можете просто использовать 'HOST': '127.0.0.1', как показано в примере кода выше.

...