我刚刚开始使用google appengine。我正在开发一个PHP的应用程序。如果我想看结果,我用了
dev_appserver.py ./ --php_executable_path /usr/bin/php5-cgi
(如果没有--php_executable_path参数,它不起作用)
它工作正常,除了我无法连接到云sql实例。我读了这个https://cloud.google.com/appengine/docs/php/cloud-sql并尝试通过以下方式连接到云sql:
$sql = new mysqli(null, 'root', // username '', // password , null, '/cloudsql/:' );
如果我将某些东西部署到appengine,这可行,但如果我需要调试app localy并且它取决于数据库,我该怎么办?
答案 0 :(得分:3)
@ DTing的回答是正确的,Google的文档鼓励您使用本地开发服务器上的本地MySQL并推荐该模式。
但是,如果您不同意并希望针对您的"生产"运行开发服务器云中的SQL也得到了支持(不鼓励,因为开发过程中的错误可能会破坏您的生产数据!)。
具体来说,您按照https://cloud.google.com/sql/docs/getting-started#work(并忽略特定于引擎的部分)的一般说明进行操作:确保您的Cloud SQL实例具有IP地址,启用外部可见工作站的IP地址,确保SQL实例具有root密码 - 然后检查一切是否正在使用命令行MySQL客户端,例如
[[注意:要验证您的工作站外部可见 IP地址,请使用浏览器访问http://checkmyip.com/等网站]
$ mysql --host=INSTANCE_IP --user=root --password
一旦所有内容都设置正确,您只需按照https://cloud.google.com/appengine/docs/php/cloud-sql/#PHP_Using_a_local_MySQL_instance_during_development:
中的说明操作即可要从开发环境连接到Cloud SQL实例, 替代" 127.0.0.1"使用实例IP地址。你不用 基于" / cloudsql /"的连接字符串,用于连接到Cloud SQL 实例,如果您的App Engine应用程序在开发中本地运行 服务器
如果要在本地使用相同的代码并进行部署,则可以使用 特殊的$ _SERVER键变量(SERVER_SOFTWARE)来确定在哪里 你的代码正在运行。这种方法如下所示。
例如,如果您的Cloud SQL的IP地址是12.34.56.78,那么您可以使用
$sql = new mysqli('12.34.56.78:3306',
'<username>',
'<password>',
<database-name>
);
未设置$_SERVER['SERVER_SOFTWARE']
或不包含Google App Engine
时(表示您已在本地开发服务器上运行)。
答案 1 :(得分:0)
上面的The Guestbook example显示了代码在App Engine中运行时应用程序如何连接到Cloud SQL实例,以及当代码在Development Server中运行时连接到本地MySQL服务器。我们鼓励这种模式尽量减少混淆并最大限度地提高灵活性。