Приложение Laravel, размещенное на Heroku с базой данных Amazon RDS MySQL, приводит к превышению времени ожидания соединения - PullRequest
0 голосов
/ 25 октября 2018

У меня есть приложение Heroku, где я размещаю свое приложение Laravel.Первоначально я начал разработку с MySQL, поэтому я хотел продолжить, используя сервис Amazon RDS.Я создал там экземпляр и смог успешно подключиться через мой MySQL-клиент, консоль и т. Д.

Проблема в том, что приложение Laravel не может подключиться к базе данных после многочисленных отчаянных попыток исправить ее.Я обнаружил, что некоторые статьи предполагают, что использование переменной окружения DATABASE_URL обязательно, поэтому я добавил ее через настройки приложения Heroku.Это выглядит так:

mysql://myusername:mypass@myhostnamefromamazon/mydb?sslca=/app/storage/certs/amazon-rds-ca-cert.pem

Я нашел это решение на веб-сайте Heroku. Я поместил файл amazon-rds-ca-cert.pem в папку моего Laravel, например: /app/storage/certs/amazon-rds-ca-cert.pem

Это не решило мою проблему, поэтому я продолжал искать и нашел Stackoverflow вопрос , который имел эту проблему на Lumen.Я настроил config/database.php в соответствии с ответом, но он все еще не работает для меня!

<?php

$credentials = get_db_credentials();

$config = [
    'default' => env('DB_CONNECTION', 'mysql'),
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', $credentials->host),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', $credentials->database),
            'username' => env('DB_USERNAME', $credentials->username),
            'password' => env('DB_PASSWORD', $credentials->password),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
    ],
];

if (env('APP_ENV') == 'production') {
    $config['connections']['mysql']['options'] = [PDO::MYSQL_ATTR_SSL_CA => '../storage/certs/amazon-rds-ca-cert.pem'];
}

return $config;

Функция get_db_credentials() просто анализирует переменную окружения DATABASE_URL.

ТочныйИсключение, которое я получаю:

[2018-10-25 19:32:16] production.ERROR: SQLSTATE[HY000] [2002] Connection timed out {"exception":"[object] (Doctrine\\DBAL\\Driver\\PDOException(code: 2002): SQLSTATE[HY000] [2002] Connection timed out at /tmp/build_05920c42a6de0a378402b798320d3f04/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:50

Я полностью потерян из-за этого и не знаю, как поступить.

1 Ответ

0 голосов
/ 25 октября 2018

Ваши группы безопасности AWS должны разрешать трафик из диапазона IP-адресов Heroku.

https://devcenter.heroku.com/articles/amazon-rds

Вы должны предоставить доступ Heroku dynos к вашему экземпляру RDS.Рекомендуемый способ сделать это - настроить экземпляр RDS так, чтобы он принимал только зашифрованные SSL-соединения от авторизованных пользователей, и настроить группу безопасности для вашего экземпляра, чтобы разрешить вход со всех IP-адресов, например, 0.0.0.0/0.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...