使用MySql2将Heroku连接到RDS

时间:2012-12-02 01:15:46

标签: mysql ruby-on-rails heroku amazon-rds

我试图做的就是在Heroku上使用RDS上的数据库实例部署我的Rails应用程序,这看起来应该很简单。

我在我的database.yml中使用了mysql2适配器并推送到heroku并按this answer添加了我的数据库实例。我基本上跟着它去了T,我没有得到missing gem错误。但这就是heroku logs揭示的内容:

/app/vendor/bundle/ruby/1.9.1/bundler/gems/mysql2-e5992664a7bc/lib/mysql2/client.rb:56:in connect': Can't connect to MySQL server on 'nickcoxrails.cud3e2tma07q.us-east-1.rds.amazonaws.com' (110) (Mysql2::Error)

另请注意我的RDS实例位于us-east,我听说这是一个问题here

在我的gemfile中,我有:

gem 'mysql2', :git => 'git://github.com/brianmario/mysql2.git'

对于我的mysql2 gem,因为这是我在本地工作的唯一方法(因为使用版本< 0.3的第一个回答在我的本地rails服务器上给了我一个错误,因为我在Rails 3.2上。 6),尝试了很多东西(我真的很难在我的本地机器上运行mysql)。

我确实已经按this answer添加了安全组,并且每this answer添加了mysql2数据库。我还在我的heroku帐户中添加了RDS插件。我运行了rake db:createrake db:schema:load以及rake db:migrate和所有内容,但由于我将本地数据库导出到我的RDS实例(我需要保持数据完好无损),所以没有任何新功能。我可以通过Sequel Pro连接到我的RDS实例,所以我知道它不是凭证问题。

这是我的第一个Rails应用程序部署,所以不要害怕愚蠢的答案并给我相当于"它是否插入?"技术支持heroku / Rails / RDS /等的问题。

3 个答案:

答案 0 :(得分:4)

Heroku更改了其过程以允许Heroku服务器连接到RDS实例。这个问题的公认答案不是应该怎么做。

  

您必须授予Heroku dynos访问您的RDS实例的权限。建议的方法是将RDS实例配置为仅接受SSL加密的连接,并为您的实例配置安全组以允许从所有IP进行入口。

     

以前,Heroku发布了其AWS账户ID和安全组名称,作为授予AWS RDS实例访问权限的方式。 不再推荐这样做。

参考:https://devcenter.heroku.com/articles/amazon_rds

答案 1 :(得分:2)

确保您已从Heroku拥有的AWS账户098166147350授权安全组default。错误消息表明您的连接不被允许。

答案 2 :(得分:0)

我刚用Heroku + AWS(MySQL实例)取得了胜利。我不得不将支持票放入Heroku以解决此问题(操作员错误),我想发布此信息以帮助其他人。我一直碰到这个话题。

我在Heroku w / Amazon MySQL RDS上使用Rails(4)。是的,您需要配置SSL(pem文件和所有有趣的)。但是我无法让Rails连接并且非常接近所有人。亚马逊数据库正在工作,我可以在Heroku / Rails之外连接没问题(通过我的IP)。

问题出在安全组和IP访问中。通过我的支持票“[你的] RDS mysql DB ...你需要允许从所有IP进入”。这是Heroku提供的链接:https://devcenter.heroku.com/articles/amazon_rds#require-ssl Heroku目前声明的地方:

“您必须授予Heroku dynos访问您的RDS实例的权限。建议的方法是将RDS实例配置为仅接受来自授权用户的SSL加密连接,并为您的实例配置安全组以允许从所有IP。“

有些搜索很快让我修改了我的AWS数据库实例的默认安全组,并添加了一个CIDR / IP条目:

0.0.0.0/0

基本上允许任何/所有IP。只要授权所有连接。

我仍在审核此设置并寻求朋友和社区的反馈。幸运的是,我仍然在开发中并且有时间消化这个设置。

希望这可以节省一些时间,这似乎是通过Heroku Dynos连接到AWS DB的当前方法。

祝你好运,我会留意任何反馈。

编辑:在设置上休眠后,我从默认设置中删除了0.0.0.0/0并将其添加到隔离的安全组并进行了测试 - 正常工作。我担心默认安全组在非SSL数据库上应用样式的IP访问。那感觉不对。