Heroku应用的数据库管理

18

我对Rails和Heroku都比较陌生,但我正在认真考虑将其用作部署Ruby/Rails应用程序的平台。

我想要利用Heroku的全部功能,因此我更喜欢由Heroku管理的“嵌入式”PostgreSQL,而不是Amazon RDS for MySQL的插件,但如果没有在SQL客户端中访问我的数据的可能性,我就不那么有信心...

我知道在一个良好制作的应用程序中你不需要访问数据库,但有些情况(添加行到配置表中,在视图中未映射的数据,更新一些列以解决调试问题,性能监控,运行查询以进行报告等)可以受益于这个功能...

你是如何解决这个问题的?在由Heroku提供支持的实际应用程序中有怎样的经验?

谢谢!


另一个与此特定主题无关但涉及Heroku部署和数据库的问题是:将代码推送到Heroku的一个不好的方面是,我必须在运行我的数据库迁移之前推送代码(并自动重新启动服务器)。这可能会导致用户在浏览网站时出现一些错误...解决方法可以使用维护模式,但我想要一种没有副作用且始终保持Web应用程序运行的方式!是否有一种方法?例如使用Capistrano:
  • 我准备在新目录中部署的代码
  • 我运行(向后)迁移
  • 我将服务器切换到新目录 ...然后我就没有停机时间了。
- zetarun
3个回答

11

我已经使用它一年左右了。我喜欢它提供的工作流程,但我发现无法访问数据真的很麻烦。你处理数据库的选项有:

Taps:理论上,您可以按照自己的想法创建本地数据库,并使用taps将模式和数据复制到Heroku。实际上,大多数情况下,它非常好用。然而,我目前正在清理taps翻译错误的某些列并破坏了我的数据。

Heroku控制台:对于所有通常的ActiveRecord操作都非常好,但与数据库最接近的是ActiveRecord :: Base.connection.execute "some sql"。当您想执行类似于修改表命令时,您就会知道自己陷入了麻烦。

他们还提供了一个“bundle”作为备份应用程序的方法。这使您可以下载所有代码以及数据库的sql转储。困难之处在于,由于没有直接的数据库访问权限,因此没有办法将相同的sql转储文件加载回数据库中,以便从数据丢失中恢复,这对于我来说是拥有这些转储文件的原因。你只能使用bundle来创建一个新的应用程序(heroku bundles:animate),而不能恢复当前的应用程序。

我希望我对任何/所有这些都是错误的。这似乎是我所知道的最好的服务中的一处麻烦。当大多数操作非常容易时,通常不会觉得失去数据库访问很重要。

对我来说,数据库访问就像灭火器。通常不是大问题,但在关键时刻,它非常重要。


嗨,sleepycat,Taps的问题在于它只适用于将数据库本地复制以运行一些查询,而不适用于向生产数据库添加数据。你能更好地解释一下你使用Taps时遇到的问题吗?Heroku的SQL执行可能是一个好的解决方案(仅适用于选择和插入,不适用于更改或删除 :))。关于bundle,你所说的真的很令人沮丧:Heroku提供这样“损坏”的备份服务是不可能的...听到其他人(也许是积极的:))的意见会很好。最后,你是使用Amazon RDS与Heroku还是使用PostGres? :) - zetarun
Taps 显然是将大量数据导入 Heroku 的唯一方法。但我的问题在于它似乎已经从 decimal(11,0)(如迁移中指定的)更改为 Numeric(11,0),再到整数,到 int(11),并且存在损坏的数据(在我的 dev db 中)。我希望通过创建一个包含所有数据的新应用程序来清理这个混乱,但 bundles:animate 创建了一个新的应用程序,但没有加载任何数据或代码!这意味着我又要重新使用 Taps,而这正是问题的根源所在。 我仍然非常喜欢 Heroku,但他们真的需要解决这个问题。 - mikewilliamson

6

我使用admin_data来了解正在发生的事情。我已经在Heroku以及其他托管提供商上成功使用过它。


4
首先,让我说一下Heroku非常棒。在部署我的应用程序和与其它服务(如Websolr)集成方面,我有着很好的体验。
说完这些,回答您的问题: 获取数据 如果您想要访问您的数据,可以使用taps将远程数据库下载到本地。这对于调试非常有用。 性能监控 使用New Relic RPM。这是Heroku的一部分,您可以从附加组件菜单中启用它。 即席数据库查询 您可以编写一个控制器,允许您执行任意SQL并查看结果,但我不建议这样做。像admin_data这样的解决方案是管理数据的好方法,但如果您想要做更复杂的事情,就必须自己编写代码。

嗨jonnii,感谢你的回答。我尝试了taps,但它只适用于将数据库本地复制以运行一些查询,而不是向生产数据库添加数据(除了第一次初始还原)。 admin_data可能很好(如果它允许执行SQL代码就更好了:)),但我无法添加行(考虑要添加到配置表中的数据)...我必须尝试如何使用ActiveRecord :: Base.connection.execute“some sql”(正如Sleepycat所说)。 - zetarun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接