簡體   English   中英

Python 3.8 DJANGO GCLOUD 問題

[英]Python 3.8 DJANGO GCLOUD issue

奇怪而令人沮喪的問題。

有兩個需要托管在 Google Cloud 上的 django 應用。 第一個應用程序當前處於活動狀態並正在提供服務,第二個應用程序不會讓步。

情況如下;

兩個 python 3.8 django 應用程序 兩個不同的雲項目,每個都有專用的 MySQL 8.0 實例

當 python manage.py runserver (app one) 在本地啟動 glcoud 第一個項目並且 CLoud_sql_proxy 正在偵聽連接時,它正確連接到 Google MySQL 實例。

(開發)D:\Development>Cloud_sql_proxy.exe -instances="someinstance:europe-west2:somename"=tcp:3306 2021/04/29 13:42:08 在 127.0.0.1:3306 上監聽 someinstance:europe-west2 :somenam 2021/04/29 13:42:08 准備好新的連接

現在我正在為第二個應用程序(不是同時)做同樣的事情,正確的項目被激活並且 CLoud_sql_proxy 正在監聽基於與第二個 Google MySQL 實例的連接的連接。

它不會連接到 MySQL 實例,而是使用本地。

如果 os.getenv('GAE_APPLICATION', 無):

總是正確的。

有沒有人有一些提示? 故障排除? 也許有人經歷過同樣的事情? 兩個應用程序的工作方式相同,雲配置也相同。

設置.py

# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

import pymysql  # noqa: 402
pymysql.version_info = (1, 4, 6, 'final', 0)  # change mysqlclient version
pymysql.install_as_MySQLdb()

# Local development mode 24/04/2020
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/someinstance:europe-west2:somename',
            'PORT': '3306',            
            'USER': 'admin',            
            'PASSWORD': '8t09q7OG0lx1jAy2',
            'NAME': 'bscsportaltest',
        }
    }
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.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

os.getenv('GAE_APPLICATION', None)將在本地返回None ,因為默認情況下您的環境中不存在此變量(除非您手動添加它)。 在這種情況下,您的應用程序將選擇 sqlite 本地數據庫,因為這就是您擁有代碼的方式。

如果您希望在本地連接到 Cloud SQL 代理,那么您需要有一個 HOST = localhost 的配置,而不是 sqlite 配置。 如下所示:

# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

import pymysql  # noqa: 402
pymysql.version_info = (1, 4, 6, 'final', 0)  # change mysqlclient version
pymysql.install_as_MySQLdb()

# Local development mode 24/04/2020
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/someinstance:europe-west2:somename',
            'PORT': '3306',            
            'USER': 'admin',            
            'PASSWORD': '8t09q7OG0lx1jAy2',
            'NAME': 'bscsportaltest',
        }
    }
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]',
    }
}

查看此鏈接以獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM