0

我使用 Flask 设计了一个简单的网站,我的目标是将它部署在 Google App 引擎上。我开始在本地处理它并使用 google cloud 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 中定义了我的全局变量,安装了烧瓶、mysqldb 以及启动我的应用程序所需的一切。我还在该计算引擎上使用了 cloud_sql_proxy,并尝试使用以下语法连接到 GC SQL 实例:

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

但它有同样的问题。我不认为这是权限问题,因为我在 GC SQL 的授权网络部分和 I AM & ADMIN 部分定义了我的计算引擎的 IP 地址,myprojectname@appspot.gserviceaccount.com 具有编辑角色!谁能帮我找出问题所在?

4

1 回答 1

0

好吧!我解决了这个问题。我遵循了谷歌云的文档,但遇到了问题。我在以下位置添加了一个简单的“/”:

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

而不是'/cloudsql'应该'/cloudsql/'

我知道这很奇怪,因为os.path.join必须在路径中添加“/”,但由于我不知道的奇怪原因,它没有这样做。

于 2017-07-19T22:34:06.843 回答