【发布时间】:2020-02-10 13:08:54
【问题描述】:
当我通过 gcloud app deploy 部署时,我没有成功从 App-Engine 上托管的 Node-JS 应用连接到 Cloud SQL
部署后报错Error: connect ENOENT /cloudsql/<INSTANCE_CONNECTION_NAME> at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)
var config = {
user: 'my_username',
database: 'test_db',
password: 'example_pass'
};
if (process.env.DB_INSTANCE_NAME && process.env.NODE_ENV === 'production') {
// Executing remotely
config.socketPath = "/cloudsql/<INSTANCE_CONNECTION_NAME>"
} else {
// Local development - add IP address to SQL access
config.host = 'XX.XX.XXX.XX';
}
let pool;
const createPool = async () => {
pool = await mysql.createPool(config);
pool.query('SELECT * FROM test_db.test_table', function (error, results, fields) {
if (error) throw error;
console.log('The result is: ', results);
});
};
createPool();
我的 app.yaml 看起来像这样:
# [START app_yaml]
runtime: nodejs
beta_settings:
cloud_sql_instances: <INSTANCE_CONNECTION_NAME>
env: flex
# [END app_yaml]
App Engine 和 Cloud SQL 数据库都在同一个项目中。我已经多次完成此处列出的步骤:https://cloud.google.com/sql/docs/mysql/connect-app-engine
我可以通过在 SQL 连接选项卡中将我的 IP 地址列入白名单来进行本地连接,没有问题。
【问题讨论】:
-
您是否正确设置了连接名称?您是否验证服务帐户已正确设置角色:
Cloud SQL Client(这是首选)? -
此外,ENOENT 错误通常是在您的配置中找不到此类目录条目的问题。您能否检查一下您的 app.js 文件中的 socketpath 配置?尝试改变socketPath如下图:socketPath =
/cloudsql/CloudSQLInstanceName:Location:root
标签: node.js google-app-engine google-cloud-sql