1

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

我正在使用 mysql2 适配器database.yml并已推送到 heroku 并根据此答案添加了我的数据库实例。我基本上已经跟随它到了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 在我的本地机器上运行)。

我肯定已经根据这个答案添加了安全组,并根据这个答案添加了 mysql2 数据库。我还在我的 heroku 帐户中添加了 RDS 插件。我跑了一遍又一遍,但是由于我将本地数据库导出到了我的 RDS 实例(我需要保持该数据完好无损),所以这些都没有任何新功能。而且我可以通过 Sequel Pro 连接到我的 RDS 实例,所以我知道这不是凭据问题。rake db:createrake db:schema:loadrake db:migrate

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

4

3 回答 3

4

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

您必须授予 Heroku dynos 对您的 RDS 实例的访问权限。推荐的方法是将 RDS 实例配置为仅接受 SSL 加密的连接,并将您的实例的安全组配置为允许来自所有 IP 的入口。

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

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

于 2013-11-18T16:07:53.497 回答
2

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

于 2012-12-03T00:36:50.580 回答
0

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

我在带有 Amazon MySQL RDS 的 Heroku 上使用 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 访问。那感觉不对。

于 2014-02-20T02:25:14.793 回答