如何从 GAE Flex 中的 Laravel 应用程序连接到 MemoryStore Redis 服务器
How to connect to MemoryStore Redis server from Laravel app in GAE Flex
我正在使用 GAE Flex 环境为 Laravel 应用程序提供服务。我已经设置了所有内容并且该应用程序正在运行。我还设置了 MemoryStore Redis 服务器并尝试从 GAE Flex Laravel 应用程序连接到服务器但是当我尝试部署我的应用程序时出现 Predis\Connection\ConnectionException: Connection timed out [tcp://10.70.**.**:6379]
错误。
我设置了 MemoryStore Redis 服务器并获取服务器的 IP 地址并将其放入我的 app.yaml 文件中,如下所示。我的应用程序在 us-east1
区域,MemoryStore Redis 区域也在 us-east1
.
我也关注了Google的官方文档:https://cloud.google.com/memorystore/docs/redis/connect-redis-instance-flex
这适用于纯 PHP 应用程序,但不适用于 Laravel 应用程序。这不是必需的,但我也创建了一个 VPC 并尝试了它,但它也没有用。
我也向 Google 云支持询问了它,但他们都帮不上忙,因为它与 Laravel 相关,他们建议我向 Whosebug 社区询问它。
runtime: php
env: flex
manual_scaling:
instances: 1
runtime_config:
document_root: public
front_controller_file: index.php
whitelist_functions: proc_open
enable_stackdriver_integration: true
env_variables:
MYSQL_USER: dbusername
MYSQL_PASSWORD: ******
MYSQL_DSN: mysql:dbname=mydbname;unix_socket=/cloudsql/project-name:us-east1:sql-server-name
APP_URL: https://www.myapp.com
APP_KEY: ******
APP_ENV: local
APP_DEBUG: true
APP_LOG: stackdriver
APP_LOG_LEVEL: debug
LOG_CHANNEL: stackdriver
DB_CONNECTION: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_DATABASE: mydbname
DB_USERNAME: dbusername
DB_PASSWORD: ******
DB_SOCKET: /cloudsql/project-name:us-east1:sql-server-name
BROADCAST_DRIVER: log
CACHE_DRIVER: redis
QUEUE_CONNECTION: database
SESSION_DRIVER: cookie
SESSION_LIFETIME: 120
REDIS_HOST: "10.70.**.**"
REDIS_PORT: "6379"
FILESYSTEM_DRIVER: local
beta_settings:
cloud_sql_instances: project-name:us-east1:sql-server-name
network:
name: default
我希望连接到 MemoryStore Redis 时不会出现任何错误。但我仍然收到此错误:
Step #2: Predis\Connection\ConnectionException : Connection timed out [tcp://10.70.**.**:6379]
Step #2:
Step #2: at /app/vendor/predis/predis/src/Connection/AbstractConnection.php:155
Step #2: 151| */
Step #2: 152| protected function onConnectionError($message, $code = null)
Step #2: 153| {
Step #2: 154| CommunicationException::handle(
Step #2: > 155| new ConnectionException($this, static::createExceptionMessage($message), $code)
Step #2: 156| );
Step #2: 157| }
Step #2: 158|
Step #2: 159| /**
Step #2:
Step #2: Exception trace:
Step #2:
Step #2: 1 Predis\Connection\AbstractConnection::onConnectionError("Connection timed out")
Step #2: /app/vendor/predis/predis/src/Connection/StreamConnection.php:128
Step #2:
Step #2: 2 Predis\Connection\StreamConnection::createStreamSocket(Object(Predis\Connection\Parameters), "tcp://10.70.**.**:6379")
Step #2: /app/vendor/predis/predis/src/Connection/StreamConnection.php:178
我找到了这个问题的解决方案。在使用该应用程序之前,有两个命令可以准备缓存。我已经从 composer.json
文件的 post-install-cmd
中删除了这些命令。如果有人需要更多细节,我可以帮助他们。就在这里评论吧。
之前:
"post-install-cmd": [
"chmod -R 777 bootstrap\/cache",
"chmod -R 777 storage",
"php artisan cache:clear",
"php artisan optimize"
]
之后:
"post-install-cmd": [
"chmod -R 777 bootstrap\/cache",
"chmod -R 777 storage",
]
我正在使用 GAE Flex 环境为 Laravel 应用程序提供服务。我已经设置了所有内容并且该应用程序正在运行。我还设置了 MemoryStore Redis 服务器并尝试从 GAE Flex Laravel 应用程序连接到服务器但是当我尝试部署我的应用程序时出现 Predis\Connection\ConnectionException: Connection timed out [tcp://10.70.**.**:6379]
错误。
我设置了 MemoryStore Redis 服务器并获取服务器的 IP 地址并将其放入我的 app.yaml 文件中,如下所示。我的应用程序在 us-east1
区域,MemoryStore Redis 区域也在 us-east1
.
我也关注了Google的官方文档:https://cloud.google.com/memorystore/docs/redis/connect-redis-instance-flex
这适用于纯 PHP 应用程序,但不适用于 Laravel 应用程序。这不是必需的,但我也创建了一个 VPC 并尝试了它,但它也没有用。
我也向 Google 云支持询问了它,但他们都帮不上忙,因为它与 Laravel 相关,他们建议我向 Whosebug 社区询问它。
runtime: php
env: flex
manual_scaling:
instances: 1
runtime_config:
document_root: public
front_controller_file: index.php
whitelist_functions: proc_open
enable_stackdriver_integration: true
env_variables:
MYSQL_USER: dbusername
MYSQL_PASSWORD: ******
MYSQL_DSN: mysql:dbname=mydbname;unix_socket=/cloudsql/project-name:us-east1:sql-server-name
APP_URL: https://www.myapp.com
APP_KEY: ******
APP_ENV: local
APP_DEBUG: true
APP_LOG: stackdriver
APP_LOG_LEVEL: debug
LOG_CHANNEL: stackdriver
DB_CONNECTION: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_DATABASE: mydbname
DB_USERNAME: dbusername
DB_PASSWORD: ******
DB_SOCKET: /cloudsql/project-name:us-east1:sql-server-name
BROADCAST_DRIVER: log
CACHE_DRIVER: redis
QUEUE_CONNECTION: database
SESSION_DRIVER: cookie
SESSION_LIFETIME: 120
REDIS_HOST: "10.70.**.**"
REDIS_PORT: "6379"
FILESYSTEM_DRIVER: local
beta_settings:
cloud_sql_instances: project-name:us-east1:sql-server-name
network:
name: default
我希望连接到 MemoryStore Redis 时不会出现任何错误。但我仍然收到此错误:
Step #2: Predis\Connection\ConnectionException : Connection timed out [tcp://10.70.**.**:6379]
Step #2:
Step #2: at /app/vendor/predis/predis/src/Connection/AbstractConnection.php:155
Step #2: 151| */
Step #2: 152| protected function onConnectionError($message, $code = null)
Step #2: 153| {
Step #2: 154| CommunicationException::handle(
Step #2: > 155| new ConnectionException($this, static::createExceptionMessage($message), $code)
Step #2: 156| );
Step #2: 157| }
Step #2: 158|
Step #2: 159| /**
Step #2:
Step #2: Exception trace:
Step #2:
Step #2: 1 Predis\Connection\AbstractConnection::onConnectionError("Connection timed out")
Step #2: /app/vendor/predis/predis/src/Connection/StreamConnection.php:128
Step #2:
Step #2: 2 Predis\Connection\StreamConnection::createStreamSocket(Object(Predis\Connection\Parameters), "tcp://10.70.**.**:6379")
Step #2: /app/vendor/predis/predis/src/Connection/StreamConnection.php:178
我找到了这个问题的解决方案。在使用该应用程序之前,有两个命令可以准备缓存。我已经从 composer.json
文件的 post-install-cmd
中删除了这些命令。如果有人需要更多细节,我可以帮助他们。就在这里评论吧。
之前:
"post-install-cmd": [
"chmod -R 777 bootstrap\/cache",
"chmod -R 777 storage",
"php artisan cache:clear",
"php artisan optimize"
]
之后:
"post-install-cmd": [
"chmod -R 777 bootstrap\/cache",
"chmod -R 777 storage",
]