我使用Flask设计了一个简单的网站,我的目标是将其部署在Google App引擎上。我开始在本地工作,并使用谷歌云SQL作为数据库。我使用google_cloud_proxy打开端口 3306 与我的 GC SQL 实例进行交互,它在本地工作正常......这是我将应用程序连接到 GC 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地址,而在I am & ADMIN部分中,myprojectname@appspot.gserviceaccount.com 具有编辑角色! 谁能帮我解决问题的地方?
好吧!我解决了问题。我遵循了谷歌云的文档,但我遇到了问题。我在以下位置添加了一个简单的"/":
cloudsql_unix_socket = os.path.join('/cloudsql', CLOUDSQL_CONNECTION_NAME)
而不是'/cloudsql'
它应该是'/cloudsql/'
我知道这很奇怪,因为os.path.join
必须在路径中添加"/",但由于我不知道的奇怪原因,它没有这样做。