LaravelアプリをホストしているHerokuアプリがあります。最初はMySQLで開発を始めたので、AmazonのRDSサービスを使って開発を続けたいと思いました。そこでインスタンスを作成し、MySQLクライアントやコンソールなどを介して正常に接続できました。
問題は、Laravelアプリがデータベースを修正しようと何度も必死に試みた後、データベースに接続できないことです。DATABASE_URL
環境変数の使用が必須であることを示唆する記事をいくつか見つけたので、Herokuアプリの設定から追加しました。それはそのように見えます:
mysql://myusername:mypass@myhostnamefromamazon/mydb?sslca=/app/storage/certs/amazon-rds-ca-cert.pem
このソリューションはHerokuのWebサイトで見つけました。次のように、amazon-rds-ca-cert.pem
ファイルをLaravelのストレージフォルダーに配置しました。/app/storage/certs/amazon-rds-ca-cert.pem
これでは問題が解決しなかったので、探し続けて、Lumenでこの問題が発生した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
私はこれに完全に迷い、どのように進めるかわからない。
AWSセキュリティグループは、HerokuのIPアドレス範囲からのトラフィックを許可する必要があります。
https://devcenter.heroku.com/articles/amazon-rds
HerokudynosにRDSインスタンスへのアクセスを許可する必要があります。これを行うための推奨される方法は、許可されたユーザーからのSSL暗号化接続のみを受け入れるようにRDSインスタンスを構成し、すべてのIPからの入力を許可するようにインスタンスのセキュリティグループを構成すること
0.0.0.0/0
です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加