[英]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.