App Engine 无法连接到 gcloud sql 数据库
App Engine can't connect to gcloud sql database
我一直在使用 Laravel 和 gcloud 创建网站 (App Engine) 和数据库 (SQL) 但由于某些原因我无法让 App Engine 连接到数据库。
我得到的错误是 "SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from
users)"
来自 laravel 自己的调试和 "Failed to load resource: the server responded with a status of 500 ()"
来自浏览器检查 window.
如果我 运行 一个本地实例,它工作正常,因为我允许我的 IP 访问 SQL 数据库。我还可以使用 MySQL workbench.
查看数据
我用过the following tutorial。
还有一个用于标准环境的,但我什至没有深入了解它。
使用 Laravel 5.5 效果更好。
我尝试过的其他事情包括连接 App Engine,就像它是与数据库不在同一个项目中的外部应用程序一样。 https://cloud.google.com/sql/docs/mysql/connect-app-engine
其中还包括向服务帐户授予角色:https://cloud.google.com/iam/docs/granting-roles-to-service-accounts
我还完成了以下步骤:
- 转到 IAM 和管理服务帐户页面。
- Select 包含您的 App Engine 应用程序的项目。
- 找到 App Engine 默认服务帐户并复制其下的电子邮件地址 (xxxx@appspot.gserviceaccount.com)。
- 使用左上角的项目菜单,return 到包含此 SQL 实例(项目名称)的项目。
- 转到 IAM 和管理 IAM 页面。
单击添加,输入电子邮件地址作为成员,然后选择云 SQL 客户端作为角色。然后点击添加。
- App.yaml 看起来如下
env: flex
runtime_config:
document_root: public
# Ensure we skip ".env", which is only for local development
skip_files:
- .env
env_variables:
# Put production environment variables here.
APP_LOG: errorlog
APP_KEY: app-key
## Set these environment variables according to your CloudSQL configuration.
DB_CONNECTION: mysql
DB_HOST: sql-ip
DB_PORT: 3306
DB_DATABASE: database-name
DB_USERNAME: db-username
DB_PASSWORD: pass
DB_SOCKET: /cloudsql/instance-connection:name
beta_settings:
cloud_sql_instances: instance-connection:name```
- 我还在 composer.json 中使用以下内容来允许访问文件和缓存配置。
755 工作类似,应该是最终的。
"chmod -R 777 bootstrap\/cache",
"chmod -R 777 storage",
"php artisan config:cache"
]
还值得注意的是,bootstrap 配置文件有错误,导致它指向我的本地文件
计算机而不是上传的文件。
如果您需要更多信息,请询问。
谢谢。
为了让 gcloud sql 数据库连接到 App Engine 实例,您的数据库环境变量应该如下所示:
DB_CONNECTION: mysql
DB_HOST: localhost;unix_socket=/cloudsql/instance-connection:name
DB_DATABASE: database-name
DB_USERNAME: db-username
DB_PASSWORD: pass
请注意,不要使用 DB_PORT 并使用带 DB_HOST 的套接字。
由于 Samuel Romero 的评论,我让它工作了。
我遵循了以下 "tutorial":https://cloud.google.com/appengine/docs/flexible/python/using-cloud-sql
使我的 app.yaml 文件看起来如下
runtime: php
env: flex
runtime_config:
document_root: public
# Ensure we skip ".env", which is only for local development
skip_files:
- .env
env_variables:
SQLALCHEMY_DATABASE_URI: >-
mysql+pymysql://USERNAME:PASSWORD@/DATABASE?unix_socket=/INSTANCE_CONNECTION_NAME
# Put production environment variables here.
APP_LOG: errorlog
APP_KEY: APPKEY
## Set these environment variables according to your CloudSQL configuration.
DB_CONNECTION: mysql
DB_HOST: localhost;unix_socket=/cloudsql/INSTANCE_CONNECTION_NAME
DB_DATABASE: DATABASE
DB_USERNAME: USERNAME
DB_PASSWORD: PASSWORD
beta_settings:
cloud_sql_instances: INSTANCE_CONNECTION_NAME
除了启用云 SQL API 之外,我本应该启用它,但可能由于某种原因被禁用了。
然后我也在Cloud SDK中运行"gcloud auth application-default login"
希望这会对某人有所帮助,如果有安全问题请告诉我。
我一直在使用 Laravel 和 gcloud 创建网站 (App Engine) 和数据库 (SQL) 但由于某些原因我无法让 App Engine 连接到数据库。
我得到的错误是 "SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from
users)"
来自 laravel 自己的调试和 "Failed to load resource: the server responded with a status of 500 ()"
来自浏览器检查 window.
如果我 运行 一个本地实例,它工作正常,因为我允许我的 IP 访问 SQL 数据库。我还可以使用 MySQL workbench.
查看数据我用过the following tutorial。 还有一个用于标准环境的,但我什至没有深入了解它。 使用 Laravel 5.5 效果更好。
我尝试过的其他事情包括连接 App Engine,就像它是与数据库不在同一个项目中的外部应用程序一样。 https://cloud.google.com/sql/docs/mysql/connect-app-engine 其中还包括向服务帐户授予角色:https://cloud.google.com/iam/docs/granting-roles-to-service-accounts
我还完成了以下步骤:
- 转到 IAM 和管理服务帐户页面。
- Select 包含您的 App Engine 应用程序的项目。
- 找到 App Engine 默认服务帐户并复制其下的电子邮件地址 (xxxx@appspot.gserviceaccount.com)。
- 使用左上角的项目菜单,return 到包含此 SQL 实例(项目名称)的项目。
- 转到 IAM 和管理 IAM 页面。
单击添加,输入电子邮件地址作为成员,然后选择云 SQL 客户端作为角色。然后点击添加。
- App.yaml 看起来如下
env: flex
runtime_config:
document_root: public
# Ensure we skip ".env", which is only for local development
skip_files:
- .env
env_variables:
# Put production environment variables here.
APP_LOG: errorlog
APP_KEY: app-key
## Set these environment variables according to your CloudSQL configuration.
DB_CONNECTION: mysql
DB_HOST: sql-ip
DB_PORT: 3306
DB_DATABASE: database-name
DB_USERNAME: db-username
DB_PASSWORD: pass
DB_SOCKET: /cloudsql/instance-connection:name
beta_settings:
cloud_sql_instances: instance-connection:name```
- 我还在 composer.json 中使用以下内容来允许访问文件和缓存配置。 755 工作类似,应该是最终的。
"chmod -R 777 bootstrap\/cache",
"chmod -R 777 storage",
"php artisan config:cache"
]
还值得注意的是,bootstrap 配置文件有错误,导致它指向我的本地文件 计算机而不是上传的文件。
如果您需要更多信息,请询问。
谢谢。
为了让 gcloud sql 数据库连接到 App Engine 实例,您的数据库环境变量应该如下所示:
DB_CONNECTION: mysql
DB_HOST: localhost;unix_socket=/cloudsql/instance-connection:name
DB_DATABASE: database-name
DB_USERNAME: db-username
DB_PASSWORD: pass
请注意,不要使用 DB_PORT 并使用带 DB_HOST 的套接字。
由于 Samuel Romero 的评论,我让它工作了。 我遵循了以下 "tutorial":https://cloud.google.com/appengine/docs/flexible/python/using-cloud-sql 使我的 app.yaml 文件看起来如下
runtime: php
env: flex
runtime_config:
document_root: public
# Ensure we skip ".env", which is only for local development
skip_files:
- .env
env_variables:
SQLALCHEMY_DATABASE_URI: >-
mysql+pymysql://USERNAME:PASSWORD@/DATABASE?unix_socket=/INSTANCE_CONNECTION_NAME
# Put production environment variables here.
APP_LOG: errorlog
APP_KEY: APPKEY
## Set these environment variables according to your CloudSQL configuration.
DB_CONNECTION: mysql
DB_HOST: localhost;unix_socket=/cloudsql/INSTANCE_CONNECTION_NAME
DB_DATABASE: DATABASE
DB_USERNAME: USERNAME
DB_PASSWORD: PASSWORD
beta_settings:
cloud_sql_instances: INSTANCE_CONNECTION_NAME
除了启用云 SQL API 之外,我本应该启用它,但可能由于某种原因被禁用了。 然后我也在Cloud SDK中运行"gcloud auth application-default login"
希望这会对某人有所帮助,如果有安全问题请告诉我。