Не удается подключиться к облаку mysql из обработчика приложений php стандартная среда с приложением laravel и сокетом unix - PullRequest
0 голосов
/ 23 марта 2020

Последние 2 дня я потратил на эту проблему, занимаясь исследованиями и поиском неисправностей, но не смог найти способ исправить это.

Я пытаюсь подключиться к экземпляру Google Cloud Sql (2nd gen mysql ) из стандартной среды App Engine с использованием Laravel Framework.

Мой app.yaml выглядит следующим образом

runtime: php73

runtime_config:
  document_root: public

handlers:
  - url: /favicon\.ico
    static_files: public/favicon.ico
    upload: public/favicon\.ico

env_variables:
  DB_DATABASE: DB_NAME
  DB_USERNAME: USER_NAME
  DB_PASSWORD: PASSWORD
  DB_SOCKET: "/cloudsql/SOCKET_NAME"

Я получаю ошибку 500 (Отчет об ошибках пуст) В Logger я получаю это

2020/03/22 22:40:08 [error] 20#20: *2 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to a member function connection() on null in /srv/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1255
Stack trace:
#0 /srv/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1221): Illuminate\Database\Eloquent\Model::resolveConnection(NULL)
#1 /srv/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1051): Illuminate\Database\Eloquent\Model->getConnection()
#2 /srv/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(968): Illuminate\Database\Eloquent\Model->newBaseQueryBuilder()
#3 /srv/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1004): Illuminate\Database\Eloquent\Model->newModelQuery()
#4 /srv/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(957): Illuminate\Database\Eloquent\Model->newQueryWithoutScopes()
#5 /srv/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1620): Illuminate\Database\Eloquent\Model->newQuery()
#6 /srv...PHP message: PHP Fatal error:  Uncaught Error: Call to a member function connection() on null in /srv/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1255

Есть идеи?

1 Ответ

0 голосов
/ 23 марта 2020

Я написал ответ: ПОДКЛЮЧЕНИЕ ДВИГАТЕЛЯ APP (FLEX И STANDARD) К ОБЛАКУ SQL ИСПОЛЬЗОВАНИЕ TCP И UNIX ДОМЕННЫЕ РОЗЕТКИ 2020

Помните, что:

В настоящее время стандартные среды App Engine не поддерживают подключение к экземпляру Cloud SQL с использованием TCP. Ваш код не должен пытаться получить доступ к экземпляру с использованием IP-адреса (например, 127.0.0.1 или 172.17.0.1), если только вы не настроили бессерверный VP C Access. Итак, давайте настроим бессерверный VP C Access.

EDIT

ваша переменная env в app.yaml

env_variables:
  # Replace USER, PASSWORD, DATABASE, and CONNECTION_NAME with the
  # values obtained when configuring your Cloud SQL instance.
  CLOUDSQL_USER: "test"
  CLOUDSQL_PASSWORD: "root"
  CLOUDSQL_DSN: "mysql:dbname=data;unix_socket=/cloudsql/your-project:us-central1:your-instance"

и ваш код подключения:


$dsn = getenv('CLOUDSQL_DSN');
$user = getenv('CLOUDSQL_USER');
$password = getenv('CLOUDSQL_PASSWORD');
// create the PDO client
$db = new PDO($dsn, $user, $password);

Это сработало для меня. Вы можете найти подробный пример здесь:

git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
    cd php-docs-samples/appengine/php72/cloudsql
...