laravel应用程序托管在heroku上,带有AmazonRDS mysql数据库,导致连接超时

xqkwcwgp  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(303)

我有一个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的问题,其中有这个流明的问题。我调整了我的头发 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

我完全不知道该怎么办。

pb3skfrl

pb3skfrl1#

您的aws安全组必须允许来自heroku的ip地址范围的通信。
https://devcenter.heroku.com/articles/amazon-rds
您必须授予heroku dynos访问您的rds示例的权限。建议的方法是将rds示例配置为仅接受来自授权用户的ssl加密连接,并将示例的安全组配置为允许从所有ip进入,例如 0.0.0.0/0 .

相关问题