2017-12-18 192 views
0

我試圖將我的應用程序移動到Heroku,但是我通過PHP訪問數據庫時遇到問題。我能夠從本地機器訪問AWS數據庫,但是當我部署到Heroku時,它會失敗。無法在Heroku上訪問AWS RDS MySQL + PHP

我已經按照從主頁面方向:https://devcenter.heroku.com/articles/amazon-rds

而且我試過SO/AWS的其他線程:

Getting Mysql2::Error (SSL connection error: ASN: bad other signature confirmation) on Heroku App with AWS RDS

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.SSLSupport

我也看到了這裏的說明: https://devcenter.heroku.com/articles/getting-started-with-php#provision-a-database

但我試圖移植現有的應用程序,所以我需要堅持我現有的PDO語法。我試圖得到這個工作:

$dbInfo = getenv('DATABASE_URL'); 
try{ 
    $dbh = new PDO($dbInfo); 
    echo json_encode(array('outcome' => true)); 
} 
catch(PDOException $ex){ 
    echo json_encode(array('outcome' => false, 'message' => 'Unable to connect')); 
} 

我的環境變量設置正確,可以運行parse_url訪問所有的數組項的;我也有位於config文件夾中的amazon-rds-ca-cert.pem。

我能夠(通過SequelPro)遠程登錄,並運行在查詢管理下,試圖迫使SSL證書:

GRANT USAGE ON *.* TO 'username'@'%' REQUIRE SSL; 

但是,當我故意拼錯了證書名稱我的本地數據庫可以仍然連接,這讓我想也許我錯過了一些需求。

回答

0

想通了;需要在PDO連接中手動指定SSL證書。在PDO語法中也有小錯誤。

try{ 
    $dbh = new PDO("mysql:host=$pdohost;dbname=$pdodb", $pdouser, $pdopass, array(
    PDO::MYSQL_ATTR_SSL_CA =>'path/to/combined-cert.pem' 
)); 
    echo json_encode(array('outcome' => true)); 
} 
catch(PDOException $ex){ 
    echo $ex; 
    echo json_encode(array('outcome' => false, 'message' => 'Unable to connect')); 
} 

還需要確定更新AWS入站規則0.0.0.0/0允許Heroku的訪問。