运行时出错 php -S localhost:8080: SQLSTATE[HY000] [2002] No such file or directory. App Engine Standard + MySQL + 入门项目

问题描述 投票:0回答:1

我正在尝试在谷歌云平台上运行名为“getting-started”的示例应用程序App Engine Standard环境:

Github 来源: https://github.com/GoogleCloudPlatform/php-docs-samples/tree/main/appengine/standard/getting-started

这是我的配置: 应用程序.yaml

runtime: php81

env_variables:
    GOOGLE_STORAGE_BUCKET: as1-kendo-picture-storage
    CLOUDSQL_CONNECTION_NAME: kendo-api-demo:asia-southeast1:bookshelf
    CLOUDSQL_USER: root
    CLOUDSQL_PASSWORD: Hello@2023
    CLOUDSQL_DATABASE_NAME: book-data

当我运行时,该应用程序在生产环境中运行良好:

gcloud app deploy

但是 尝试从 Cloud Shell Editor 在本地主机上运行时出现错误

php -S localhost:8080

Slim Application Error
The application could not run because of the following error:

Details
Type: PDOException
Code: 2002
Message: SQLSTATE[HY000] [2002] No such file or directory
File: /home/kenluong_com/kendo/getting-started/src/app.php
Line: 81
Trace
#0 /home/kenluong_com/kendo/getting-started/src/app.php(81): PDO->__construct('mysql:unix_sock...', '', '')
#1 [internal function]: {closure}(Object(DI\Container), Object(DI\Definition\FactoryDefinition))
#2 /home/kenluong_com/kendo/getting-started/vendor/php-di/invoker/src/Invoker.php(82): call_user_func_array(Object(Closure), Array)
#3 /home/kenluong_com/kendo/getting-started/vendor/php-di/php-di/src/Definition/Resolver/FactoryResolver.php(80): Invoker\Invoker->call(Object(Closure), Array)
#4 /home/kenluong_com/kendo/getting-started/vendor/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php(71): DI\Definition\Resolver\FactoryResolver->resolve(Object(DI\Definition\FactoryDefinition), Array)
#5 /home/kenluong_com/kendo/getting-started/vendor/php-di/php-di/src/Container.php(390): DI\Definition\Resolver\ResolverDispatcher->resolve(Object(DI\Definition\FactoryDefinition), Array)
#6 /home/kenluong_com/kendo/getting-started/vendor/php-di/php-di/src/Container.php(139): DI\Container->resolveDefinition(Object(DI\Definition\FactoryDefinition))
#7 /home/kenluong_com/kendo/getting-started/src/controllers.php(38): DI\Container->get('cloudsql')
#8 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(43): Closure->Google\Cloud\Samples\Bookshelf\{closure}(Object(Slim\Psr7\Request), Object(Slim\Psr7\Response), Array)
#9 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/Routing/Route.php(384): Slim\Handlers\Strategies\RequestResponse->__invoke(Object(Closure), Object(Slim\Psr7\Request), Object(Slim\Psr7\Response), Array)
#10 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/MiddlewareDispatcher.php(81): Slim\Routing\Route->handle(Object(Slim\Psr7\Request))
#11 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/MiddlewareDispatcher.php(81): Slim\MiddlewareDispatcher->handle(Object(Slim\Psr7\Request))
#12 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/Routing/Route.php(341): Slim\MiddlewareDispatcher->handle(Object(Slim\Psr7\Request))
#13 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/Routing/RouteRunner.php(84): Slim\Routing\Route->run(Object(Slim\Psr7\Request))
#14 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php(107): Slim\Routing\RouteRunner->handle(Object(Slim\Psr7\Request))
#15 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/MiddlewareDispatcher.php(147): Slim\Middleware\ErrorMiddleware->process(Object(Slim\Psr7\Request), Object(Slim\Routing\RouteRunner))
#16 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/MiddlewareDispatcher.php(81): class@anonymous->handle(Object(Slim\Psr7\Request))
#17 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/App.php(215): Slim\MiddlewareDispatcher->handle(Object(Slim\Psr7\Request))
#18 /home/kenluong_com/kendo/getting-started/vendor/slim/slim/Slim/App.php(199): Slim\App->handle(Object(Slim\Psr7\Request))
#19 /home/kenluong_com/kendo/getting-started/index.php(38): Slim\App->run()
#20 {main}

Cloud Shell Debug

我猜本地主机MySQL之间的连接<=>有问题。 但我不知道在哪里以及如何更改配置。 我在本地主机上运行的目的是实时进行 php 调试.

你能帮我解决这个问题吗?

我搜索了很多关于以下内容的结果:

app engine, slim framework, SQLSTATE[HY000] [2002] No such file or directory.

却无法解决问题

非常感谢, 肯

php mysql google-app-engine localhost google-cloud-sql
1个回答
0
投票

App Engine 为您运行 Cloud SQL 代理并在

/cloudsql/<INSTANCE_CONNECTION_NAME>
处创建一个 Unix 套接字。

要在本地(或在 Cloud Shell 中)模拟相同的连接路径,您需要自己运行 Cloud SQL Auth Proxy:

./cloud-sql-proxy --unix-socket /cloudsql <INSTANCE_CONNECTION_NAME>

有关详细信息,请参阅文档

© www.soinside.com 2019 - 2024. All rights reserved.