【发布时间】:2019-08-28 01:26:19
【问题描述】:
我正在尝试在 Google App Engine 标准环境中配置我的 Wordpress 网站。我已经为 MySQL 第二代实例配置了 Cloud SQL,并且可以使用 Cloud SQL 代理访问它。
我遇到的问题是在将应用部署到 Google App Engine (GAE) 环境后连接到 Cloud SQL 实例。这是两个不同的连接字符串;一个用于 GAE 环境,另一个用于本地环境。
if (isset($_SERVER['GAE_ENV'])) {
$dbConn = mysqli_connect (null, DB_USER, DB_PASSWORD, DB_NAME, 3306, DB_SOCK);
} else { // local environment
$dbConn = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
}
当地环境
当我使用这 4 个参数时,本地环境的连接字符串可以完美运行:DB_HOST、DB_USER、DB_PASSWORD、DB_NAME。当我尝试在GAE环境中使用四个参数的相同连接字符串时,它会抛出一个错误:
Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known
GAE 环境
在this question 中,我被告知使用所有6 个可选参数调用mysqli_connect,其中null 用于参数1,3306 用于参数5,作为端口。当我尝试使用具有以下 6 个参数的 GAE 连接字符串进行连接时:null、DB_USER、DB_PASSWORD、DB_NAME、3306、DB_SOCK,我得到一个稍微不同的错误:
Fatal error: Uncaught mysqli_sql_exception: No such file or directory
这是来自wp-config.php 的代码,它根据环境设置连接字符串变量:
if ($onGae) {
/** GAE Environment */
define('DB_NAME', 'database');
define('DB_HOST', ':/cloudsql/project_id:region:instance_id');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
} else {
/** Local environment */
define('DB_NAME', 'database');
define('DB_HOST', '127.0.0.1');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
}
无论我尝试什么,我似乎都无法让 mysqli_connect 从 GAE 连接到 CloudSQL。有人可以告诉我我做错了什么吗?谢谢。
【问题讨论】:
-
就像尝试一样...在 GAE 环境中将 DB_HOST 更改为 'localhost' 并确认您收到相同的错误消息(消除一些容易敲掉的东西)。跨度>
-
谢谢加布。我尝试了将 DB_HOST 更改为
localhost的建议,但是当我这样做时,我得到一个“建立数据库连接时出错”。这是有道理的,因为如果不指定 ':/cloudsql/project_id:region:instance_id',它将不知道要连接到哪个数据库。我假设您告诉我要更改 wp-config.php 文件中的 DB_HOST 条目,而不是 mysqli_connect 调用中的条目,对吧? -
不,那很好。由于某种原因,我想确认“文件丢失”不是套接字。该错误通常意味着数据库不可用(现在不是 Cloud SQL,我们说的是它下面的 MySQL 数据库)。我今天出差了,我看看能不能也戳人看看。
标签: php mysql wordpress google-app-engine google-cloud-sql