您可以通过DATABASE_URL 配置指定some mysql2 SSL params。它们将作为项目添加到在 Heroku 构建过程中生成的动态 database.yml 中,因此它们将在创建 mysql2 连接时传递。
您需要传递的唯一参数是sslca(不要与sslcapath混淆)。
1.下载Amazon RDS CA certificate 并将其与您的应用捆绑在一起。
(编辑)亚马逊将在 2015 年 3 月成为 rotating this certificate。您需要该页面中的新文件,而不是这个。
curl https://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem > ./config/amazon-rds-ca-cert.pem
2。将文件添加到 git,然后重新部署到 Heroku。
3.将DATABASE_URL 改为通过sslca:
heroku config:add DATABASE_URL="mysql2://username:password@hostname/dbname?sslca=config/amazon-rds-ca-cert.pem -a <app_id>
那里的相对路径很重要——见下文。
就是这样!既然您已经使用 SSL,您可能希望强制与该用户的所有连接都只允许 SSL:
GRANT USAGE ON dbname.* TO 'username'@'%' REQUIRE SSL;
疑难解答
确保将相对路径传递给sslca!否则,rake assets:precompile 可能会因 SSL 错误而中断。如果您收到如下错误:
SSL connection error: ASN: bad other signature confirmation
甚至只是:
SSL connection error
...那么 CA 证书文件的引用方式可能有问题。