连接到Google云时发生内部错误SQL

问题描述:

我设计了一个使用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]具有编辑角色! 谁能帮我解决问题出在哪里?

好!我解决了这个问题。我跟着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不会在路径中添加'/'。我添加了'/'并解决了问题!我知道这很奇怪。 –