簡體   English   中英

使用 Amazon RDS MySQL 數據庫托管在 Heroku 上的 Laravel 應用程序導致連接超時

[英]Laravel app hosted on Heroku with a Amazon RDS MySQL Database results in a connection time out

我有一個 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

我對此完全迷失了,不確定如何繼續。

您的 AWS 安全組必須允許來自 Heroku 的 IP 地址范圍的流量。

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

您必須授予 Heroku dynos 訪問您的 RDS 實例的權限。 推薦的方法是將 RDS 實例配置為僅接受來自授權用戶的 SSL 加密連接,並為您的實例配置安全組以允許來自所有 IP 的入口,例如0.0.0.0/0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM