从本地开发服务器连接到google cloud sql

时间:2015-03-29 17:20:53

标签: google-app-engine google-cloud-sql

我刚刚开始使用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并且它取决于数据库,我该怎么办?

2 个答案:

答案 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)

https://cloud.google.com/appengine/docs/php/cloud-sql/#PHP_Using_a_local_MySQL_instance_during_development

  上面的

The Guestbook example显示了代码在App Engine中运行时应用程序如何连接到Cloud SQL实例,以及当代码在Development Server中运行时连接到本地MySQL服务器。我们鼓励这种模式尽量减少混淆并最大限度地提高灵活性。