Как подключиться к Cloud SQL из проекта Laravel, запущенного в Cloud Run?

для проверки концепции проекта я пытаюсь подключить свой проект Laravel, работающий на полностью управляемом Cloud Run, с Cloud SQL в качестве уровня хранилища.

Мне удалось получить работающую службу через Google App Engine с помощью команды gcloud app engine (эта служба может подключаться к уровню хранилища). Я также успешно подключился к слою хранилища через cloud_sql_proxy и локальный док-контейнер моего сервиса. Но мне не удается настроить удаленную работу с Cloud Run.

Я развертываю образ докера следующим образом:

gcloud run deploy --image eu.gcr.io/demo/customerservice --add-cloudsql-instances demo:europe-west1:dps-demo --update-env-vars INSTANCE_CONNECTION_NAME = "demo:europe-west1:dps-demo

Ошибка, которую моя служба возвращает для запросов:

could not find driver (SQL: select * from `cache` where `key` = laravel_cachefa9d927c88ff8ebffd06913d97f9d59e limit 1)

(Эта ошибка возникает для любого типа запросов к базе данных и аналогична, если я использую локальный кеш)

Это мой файл .env (я удалил некоторые лишние элементы, не связанные с проблемой):

APP_NAME=Laravel
APP_ENV=local
APP_KEY=***
APP_DEBUG=true
APP_URL=http://CustomerService.test
APP_STORAGE=/tmp


LOG_CHANNEL=stack
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=***
DB_SOCKET=/cloudsql/demo:europe-west1:dps-demo

BROADCAST_DRIVER=log
CACHE_DRIVER=database
QUEUE_CONNECTION=sync
SESSION_DRIVER=database
SESSION_LIFETIME=120

VIEW_COMPILED_PATH=/tmp

executor не удалось запустить [/bin/sh -c docker-php-ext-install pdo pdo_mysql mbstring]: код выхода: 1

Fernando Torres 16.06.2021 20:10
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
4
1
1 788
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Убедитесь, что в контейнере включены соответствующие модули php/mysql/pdo.

Конфигурация вашей БД должна быть примерно такой:

 'mysql' => [
            'driver' => 'mysql',
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],

Обратите внимание на unix_socket одну запись, то есть /cloudsql/instance_name и ни хоста, ни порта, поскольку вы подключаетесь через сокет unix.

Потрясающий! Еще раз спасибо, это решило это. Мне не хватало зависимости pdo_mysql.

GroovyP 11.12.2020 15:53

Другие вопросы по теме