如何通过Google App Engine与在Compute Engine实例上运行的mysql服务器通信?我们正在使用Google App Engine作为前端。我们希望将数据库托管在Compute Engine上运行的mysql服务器上。有什么办法可以做到这一点?
我们经历了以下过程:https : //cloud.google.com/solutions/mysql-remote-access
程式码片段:
if (os.getenv('SERVER_SOFTWARE') and
os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')):
db=MySQLdb.connect(host="InternalIP", port=3306, db='test_database', user='root',passwd="db_password")
else:
db = MySQLdb.connect(host='127.0.0.1', port=3306, db='test_database', user='root', charset='utf8')
cursor = db.cursor()
logging.info("Hey there looks like I am connected")
Igor在上面的评论暗示了如何使它工作。我设法制作了一个可运行的应用程序,并对记录的解决方案进行了以下更改。
host
参数指定一个公共(外部)IP地址,而不是unix_socket
。pymysql
。特别是,您要将pymysql
目录从该GitHub存储库复制到您的应用程序目录中。使用pymysql
还意味着您无需添加MySQLdb
到libraries:
app.yaml部分。在connections.py
第52行附近的,更改以下行:
if _py_version == (2, 7) and not IRONPYTHON
到
if _py_version == (2, 7) and not IRONPYTHON and not os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine'):
您可能需要更改mysql中的MySQL权限授予,以允许从App Engine源IP地址进行访问。
需要此解决方法的原因是App Engine套接字库未实现中的_socketio
包装器使用的某些异步IO原语pymysql
。同时MySQLdb
,App Engine随附的模块包装了一个C库,该C库不知道如何使用App Enginesockets
库(并且可能未编译套接字支持)。
我将看看后一种组合是否可以解决,但与此同时,以上3个步骤应提供一种解决方法,可用于连接到您自己的MySQL或Cloud SQL版本2。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句