我已成功将我的应用程序部署到Google App Engine。我的数据库已启动并在Cloud SQL上运行。通过在云SQL的授权网络上对我的开发计算机的IP进行白化处理,我可以从本地计算机连接到数据库,而不会出现问题。但是,当我部署到生产环境时,会得到:
Error: connect ENOENT /cloudsql/<my project id>:asia-south1:<my database instance name>
我的app.yaml文件如下:
runtime: nodejs
env: flex
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
env_variables:
ST_ENV: 'Production' //Used to set the app listening on the below port
ST_PORT: '8080'
SQL_USER: '<username>'
SQL_PASSWORD: '<password>'
SQL_DATABASE: '<databasename>'
INSTANCE_CONNECTION_NAME: '/cloudsql/<my project id>:asia-south1:<my database instance name>'
beta_settings:
cloud_sql_instances: '<my project id>:asia-south1:<my database instance name>'
我的配置文件如下:
database: {
connectionLimit: 10,
// host : process.env.INSTANCE_CONNECTION_NAME,
socketPath: process.env.INSTANCE_CONNECTION_NAME,
user : process.env.SQL_USER,
password : process.env.SQL_PASSWORD,
database : process.env.SQL_DATABASE,
multipleStatements : true
}
我正在创建一个连接池(我已经简化了此示例的代码):
var db = config.production.database;
var pool = mysql.createPool(db);
我已经能够通过本地cloud_sql_proxy从本地计算机成功连接。
我尝试使用Cloud SQL实例的IP作为主机,但这给了我以下错误:
Error: connect ECONNREFUSED 127.0.0.1:3306'
我还尝试将主机指定为0.0.0.0和端口3306并得到:
Error: connect ECONNREFUSED 0.0.0.0:3306'
编辑:同时启用了Cloud SQL和Cloud SQL Admin API:
这就像在推向生产时,应用程序引擎正在尝试使用不存在的代理。有人可以帮忙吗?
答案 0 :(得分:0)
请查看connecting from the Node.js runtime on App Engine Flexible的特定说明。您可以使用实例连接名称和其他一些环境变量来配置连接。无需提供主机名或在实例上安装SQL代理。尝试连接到Cloud SQL实例won't work from App Engine的公共IP。