我已遵循本指南 https://cloud.google.com/community/tutorials/run-sailsjs-on-google-app-engine 关于如何将 Sails 部署到 Google App Engine。 然而,我的应用程序使用 MySQL 作为数据库,我在“connection.js”中这样设置了它。
mysql: {
adapter: 'sails-mysql',
host: '104.199.196.99', // Internal IP Address of the Cloud SQL Instance
user: 'root',
password: 'xxxxxx',
database: 'xxxxxxxx'
}
我在尝试连接 Cloud SQL 时遇到的错误(当我发出涉及数据库连接的登录请求时)是:
Sending 500 ("Server Error") response:
Error (E_UNKNOWN) :: Encountered an unexpected error
Could not connect to MySQL:
Error: connect ETIMEDOUT
我设置正确了吗?
最佳答案
对于那些寻求使用带有 Sails.js 的 Google App Engine 连接到 Google Cloud SQL 的解决方案的人,我已经找到了。
使用主机地址连接到 Google Cloud SQL 在这里不起作用,因为 Cloud SQL 的防火墙规则和访问控制将阻止这种连接到白名单地址。不幸的是,无法为 Google App Engine 分配静态 IP 地址。因此,Cloud SQL 无法将 App Engine 列入白名单,或者您需要将 0.0.0.0/0 列入白名单,这是不安全的。
解决方案是在您的 connection.js 中使用此配置。
googleCloudSQL: {
adapter: 'sails-mysql',
socketPath: '/cloudsql/' + process.env.INSTANCE_CONNECTION_NAME,
user: 'XXXXX',
password: 'XXXXXXX',
database: 'XXXXXXXX'
}
通过套接字路径使用 Cloud SQL 的实例连接名称连接到 Cloud SQL,这是执行此操作的 native 方法。如果您的 App Engine 已经与您的 Cloud SQL 在同一个项目中,那么它已经获得连接授权。但是,如果它们在不同的项目中,您将需要设置服务帐户和 IAM。
关于mysql - 使用 Cloud SQL 在 Google App Engine 上扬 sails 起航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44527425/