我试图做的就是在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:create
和rake db:schema:load
以及rake db:migrate
和所有内容,但由于我将本地数据库导出到我的RDS实例(我需要保持数据完好无损),所以没有任何新功能。我可以通过Sequel Pro连接到我的RDS实例,所以我知道它不是凭证问题。
这是我的第一个Rails应用程序部署,所以不要害怕愚蠢的答案并给我相当于"它是否插入?"技术支持heroku / Rails / RDS /等的问题。
答案 0 :(得分:4)
Heroku更改了其过程以允许Heroku服务器连接到RDS实例。这个问题的公认答案不是应该怎么做。
您必须授予Heroku dynos访问您的RDS实例的权限。建议的方法是将RDS实例配置为仅接受SSL加密的连接,并为您的实例配置安全组以允许从所有IP进行入口。
以前,Heroku发布了其AWS账户ID和安全组名称,作为授予AWS 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访问。那感觉不对。