0

我設計了一個使用Flask的簡單網站,我的目標是將其部署到Google App引擎上。我開始在本地開發它,並使用谷歌雲數據庫。我用google_cloud_proxy打開端口3306與我的GC SQL實例進行交互,它在本地工作正常...這是我連接我的應用程序到GC SQL的方式:連接到Google雲時發生內部錯誤SQL

我有一個app.yaml文件,我「已經定義我的全局變量在它:

env_variables: 
    CLOUDSQL_SERVER = '127.0.0.1' 
    CLOUDSQL_CONNECTION_NAME = "myProjectName:us-central1:project"` 
    CLOUDSQL_USER = "user" 
    CLOUDSQL_PASSWORD = "myPassword" 
    CLOUDSQL_PORT = 3306 
    CLOUDSQL_DATABASE = "database" 

,並從我的本地機器我做的:

db = MySQLdb.connect(CLOUDSQL_SERVER,CLOUDSQL_USER,CLOUDSQL_PASSWORD,CLOUDSQL_DATABASE,CLOUDSQL_PORT) 

,如果我想獲得連接在App Engine上,我做的:

cloudsql_unix_socket = os.path.join('/cloudsql', CLOUDSQL_CONNECTION_NAME) 
db = MySQLdb.connect(unix_socket=cloudsql_unix_socket,user=CLOUDSQL_USER,passwd=CLOUDSQL_PASSWORD,db=CLOUDSQL_DATABASE) 

網站的靜態部分正在運行,但例如,當我想用​​存儲在GC SQL中的用戶名和密碼登錄時,我收到內部錯誤。

我嘗試了另一種方式......我啓動了一個計算引擎,在config.py中定義了我的全局變量,安裝了flask,mysqldb以及啓動我的應用程序所需的所有東西。我還用cloud_sql_proxy上計算引擎和我想這句法連接到GC SQL實例:

db = MySQLdb.connect(CLOUDSQL_SERVER,CLOUDSQL_USER,CLOUDSQL_PASSWORD,CLOUDSQL_DATABASE,CLOUDSQL_PORT) 

,但它有同樣的問題。我不認爲這是權限問題,因爲我在GC SQL的授權網絡部分中定義了計算引擎的IP地址,而在我的ADMIN部分中,[email protected]具有編輯角色! 誰能幫我解決問題出在哪裏?

回答

0

好!我解決了這個問題。我跟着the Google cloud's documentation但我有problems.I添加了一個簡單的「/」:

cloudsql_unix_socket = os.path.join('/cloudsql', CLOUDSQL_CONNECTION_NAME) 

,而不是'/cloudsql'應該'/cloudsql/'

我知道這很奇怪,因爲os.path.join必須加上「/」的路徑,但出於奇怪的原因,我不知道,它並沒有這樣做。

+0

編輯:其實,我不能再現問題:看起來'os.path.join'正確地爲你添加'/': >>> os.path.join('/ cloudsql', 'bananana:asdf:asdf') '/ cloudsql/bananana:asdf:asdf' 您確定添加'/'是解決問題的唯一方法嗎? –

+0

我幾天的想法一樣,我認爲我的問題不在這個部分,因爲'os.path.join'在最後加上'/'。但後來我在github上看到了一個他們使用''/ cloudsql/{}'.format(connection_name)'的項目。然後我想可能os.path.join不會在路徑中添加'/'。我添加了'/'並解決了問題!我知道這很奇怪。 –