Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Heroku上托管的Laravel应用程序带有亚马逊RDS MySQL数据库,导致连接超时_Php_Mysql_Laravel_Amazon Web Services_Heroku - Fatal编程技术网

Php Heroku上托管的Laravel应用程序带有亚马逊RDS MySQL数据库,导致连接超时

Php Heroku上托管的Laravel应用程序带有亚马逊RDS MySQL数据库,导致连接超时,php,mysql,laravel,amazon-web-services,heroku,Php,Mysql,Laravel,Amazon Web Services,Heroku,我有一个Heroku应用程序,我在那里托管我的Laravel应用程序。我最初是从MySQL开始开发的,所以我想继续使用Amazon的RDS服务。我在那里创建了实例,并通过MySQL客户端、控制台等成功连接 问题是,在我无数次不顾一切地试图修复它之后,Laravel应用程序无法连接数据库。我发现一些文章建议必须使用DATABASE\u URL环境变量,因此我通过Heroku应用程序设置添加了它。看起来是这样的: mysql://myusername:mypass@myhostnamefromama

我有一个Heroku应用程序,我在那里托管我的Laravel应用程序。我最初是从MySQL开始开发的,所以我想继续使用Amazon的RDS服务。我在那里创建了实例,并通过MySQL客户端、控制台等成功连接

问题是,在我无数次不顾一切地试图修复它之后,Laravel应用程序无法连接数据库。我发现一些文章建议必须使用
DATABASE\u URL
环境变量,因此我通过Heroku应用程序设置添加了它。看起来是这样的:

mysql://myusername:mypass@myhostnamefromamazon/mydb?sslca=/app/storage/certs/amazon-rds-ca-cert.pem
我已将
amazon-rds-ca-cert.pem
文件放在我的Laravel的存储文件夹中,如下所示:
/app/storage/certs/amazon-rds-ca-cert.pem

这并没有解决我的问题,所以我继续寻找,并找到了一个有流明问题的。我根据答案调整了我的
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;

我完全不知道该怎么做。

您的AWS安全组必须允许来自Heroku IP地址范围的流量

您必须授予Heroku dynos访问RDS实例的权限。建议的方法是将RDS实例配置为仅接受来自授权用户的SSL加密连接,并将实例的安全组配置为允许从所有IP进入,例如
0.0.0.0/0


您的RDS实例的安全组是否允许来自Heroku的IP空间的流量?我不知道。我该怎么检查呢?如果你不知道,那不是你干的。您需要在AWS控制台的EC2“安全组”部分下允许通信。请参阅以了解详细信息。这解决了它!我想我错过了那部分。你可以把这个作为答案贴出来,这样我就可以接受了。非常感谢。
[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