我正在尝试在谷歌云平台上运行名为“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}
我猜本地主机MySQL之间的连接<=>有问题。 但我不知道在哪里以及如何更改配置。 我在本地主机上运行的目的是实时进行 php 调试.
你能帮我解决这个问题吗?
我搜索了很多关于以下内容的结果:
app engine, slim framework, SQLSTATE[HY000] [2002] No such file or directory.
却无法解决问题
非常感谢, 肯
App Engine 为您运行 Cloud SQL 代理并在
/cloudsql/<INSTANCE_CONNECTION_NAME>
处创建一个 Unix 套接字。
要在本地(或在 Cloud Shell 中)模拟相同的连接路径,您需要自己运行 Cloud SQL Auth Proxy:
./cloud-sql-proxy --unix-socket /cloudsql <INSTANCE_CONNECTION_NAME>
有关详细信息,请参阅文档。