为什么我的 App Engine 应用程序中的 Eloquent 无法连接到我的 Google SQL 实例?
Why cant Eloquent in my App Engine app connect to my Google SQL instance?
奇怪的是,我可以从 PHPStorm 的数据库工具连接到我的 Google SQL 实例,只是在部署时似乎无法在本地连接。
当我在本地开发时 - 我的应用程序可以使用下面的环境变量连接到我的本地堆栈实例 (docker)。
这是我的 app.yaml
runtime: php72
api_version: 1
handlers:
- url: /.*
script: public/index.php
env_variables:
MYSQL_DSN: "mysql:unix_socket=/cloudsql/project:location:sql-instance;dbname=databaseName"
MYSQL_USER: "username"
MYSQL_PASSWORD: "password"
runtime_config:
enable_stackdriver_integration: true
这是我在 Eloquent / Illuminate 中初始化它的方式。
use Illuminate\Database\Capsule\Manager;
$db = [];
if(getenv("MYSQL_DSN")){
$db = [
'driver' => 'mysql',
'dsn' => getenv("MYSQL_DSN"),
'username' => getenv("MYSQL_USER"),
'password' => getenv("MYSQL_PASSWORD"),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
];
} else if(getenv("MYSQL_HOST")){
$db = [
'driver' => 'mysql',
'host' => getenv("MYSQL_HOST"),
'database' => getenv("MYSQL_DATABASE"),
'username' => getenv("MYSQL_USER"),
'password' => getenv("MYSQL_PASSWORD"),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
];
}
$settings = [
// Slim Settings
'determineRouteBeforeAppMiddleware' => false,
'displayErrorDetails' => true,
'db' => $db
];
$container = $this->getContainer();
$capsule = new Manager;
$capsule->addConnection($settings['db']);
$capsule->setAsGlobal();
$capsule->bootEloquent();
您的 Cloud SQL 实例是否允许从您正在测试的位置进行连接?在 SQL instance page in the GCP Console.
的授权选项卡下检查授权网络
如果不确定,您可以尝试添加 0.0.0.0/0
以测试允许所有 IPv4 连接。稍后关闭以防止未经授权的直接数据库连接。
奇怪的是,我可以从 PHPStorm 的数据库工具连接到我的 Google SQL 实例,只是在部署时似乎无法在本地连接。
当我在本地开发时 - 我的应用程序可以使用下面的环境变量连接到我的本地堆栈实例 (docker)。
这是我的 app.yaml
runtime: php72
api_version: 1
handlers:
- url: /.*
script: public/index.php
env_variables:
MYSQL_DSN: "mysql:unix_socket=/cloudsql/project:location:sql-instance;dbname=databaseName"
MYSQL_USER: "username"
MYSQL_PASSWORD: "password"
runtime_config:
enable_stackdriver_integration: true
这是我在 Eloquent / Illuminate 中初始化它的方式。
use Illuminate\Database\Capsule\Manager;
$db = [];
if(getenv("MYSQL_DSN")){
$db = [
'driver' => 'mysql',
'dsn' => getenv("MYSQL_DSN"),
'username' => getenv("MYSQL_USER"),
'password' => getenv("MYSQL_PASSWORD"),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
];
} else if(getenv("MYSQL_HOST")){
$db = [
'driver' => 'mysql',
'host' => getenv("MYSQL_HOST"),
'database' => getenv("MYSQL_DATABASE"),
'username' => getenv("MYSQL_USER"),
'password' => getenv("MYSQL_PASSWORD"),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
];
}
$settings = [
// Slim Settings
'determineRouteBeforeAppMiddleware' => false,
'displayErrorDetails' => true,
'db' => $db
];
$container = $this->getContainer();
$capsule = new Manager;
$capsule->addConnection($settings['db']);
$capsule->setAsGlobal();
$capsule->bootEloquent();
您的 Cloud SQL 实例是否允许从您正在测试的位置进行连接?在 SQL instance page in the GCP Console.
的授权选项卡下检查授权网络如果不确定,您可以尝试添加 0.0.0.0/0
以测试允许所有 IPv4 连接。稍后关闭以防止未经授权的直接数据库连接。