У меня есть приложение 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
Я полностью потерян из-за этого и не знаю, как поступить.