【问题标题】:DB management for Heroku appsHeroku 应用程序的数据库管理
【发布时间】:2011-01-28 06:07:48
【问题描述】:

我对 Rails 和 Heroku 都很陌生,但我正在认真考虑使用它作为一个平台来部署我的 Ruby/Rails 应用程序。

我想使用 Heroku 的所有功能,所以我更喜欢 Heroku 管理的“嵌入式”PostgreSQL,而不是 Amazon RDS for MySQL 的插件,但我不太有信心,因为无法在SQL 客户端...

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

你如何解决这个问题?在由 Heroku 提供支持的现实应用中,您有什么体验?

谢谢!

【问题讨论】:

  • 另一个与这个特定线程没有直接关系但谈论 Heroku 部署和 DB 的问题是:推送到 Heroku 的一个坏方面是我必须在运行我的之前推送代码(并自动重新启动服务器)数据库迁移。这可能会导致用户浏览网站时出现一些错误......解决方案可能是使用维护模式,但我想要一种没有缺点的方法,让我的 webapp 每次都运行!有没有办法?以 Capistrano 为例: - 我准备要在新目录中部署的代码 - 我运行(向后)迁移 - 我将服务器切换到新目录 ...而且我没有停机时间。

标签: ruby-on-rails ruby database deployment heroku


【解决方案1】:

我已经使用它大约一年了。我喜欢它提供的工作流程,但我发现无法访问数据确实很麻烦。您使用数据库的选项是:

Taps:理论上,您可以根据需要在本地创建数据库,并使用 Taps 将架构和数据复制到 Heroku。在实践中,大多数时候它都非常棒。但是,我目前正在处理在水龙头翻译我的一些列并损坏我的数据之后的清理工作。

Heroku 控制台:对于所有常见的 ActiveRecord 东西来说完全没问题,但最接近数据库的是 ActiveRecord::Base.connection.execute "some sql"。当您发现自己对执行类似的 alter table 命令感到疑惑时,您就会知道自己遇到了麻烦。

它们还提供“捆绑包”作为备份应用程序的方法。这使您可以下载所有代码以及数据库的 sql 转储。困难在于,由于没有直接的数据库访问,因此无法将相同的 sql 转储加载回数据库,因此您可以从数据丢失中恢复,对我来说,这就是让这些转储文件开始的关键。您可以使用捆绑包创建一个新应用程序(heroku bundles:animate),而不是恢复当前应用程序。

我很想对任何/所有这些都是错误的。在我所知道的最深思熟虑的服务中,这似乎是一个奇怪的粗略点。当您所做的大部分工作都变得如此简单时,通常不会放弃数据库访问。

对我来说,数据库访问就像一个灭火器。通常没什么大不了的,但是当它很重要时,它很重要。

【讨论】:

  • 嗨 sleepycat,水龙头的问题是只在本地复制数据库以运行一些查询而不向生产数据库添加数据是好的。你能更好地解释一下你在使用水龙头时遇到的问题吗? Heroku 的 sql 执行可能是一个很好的 - 虽然不舒服 - 解决方案(仅用于选择和插入,而不是更改或删除 :))。您对捆绑包所说的话真的很可悲:Heroku 不可能提供这样的“损坏”备份服务......很高兴听到一些其他意见(也许是积极的:))。绝对:您是在使用 Amazon RDS 和 Heroku,还是使用 PostGres? :)
  • Taps 显然是将大量数据导入 Heroku 的唯一方法。我的问题是它似乎已经从十进制(11,0)(在迁移中指定)更改为(通过一些推/拉操作)到数字(11,0)到整数,到 int(11)损坏的数据(在我的开发数据库中)。我曾希望通过使用我的包中的所有数据创建一个新应用程序来清理混乱,但是 bundles:animate 创建了一个新应用程序但不加载任何数据或代码!这意味着我再次使用 Taps,这导致了问题的开始。我仍然很喜欢 Heroku,但他们确实需要为此努力。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    首先让我先说heroku 很棒。我在部署我的应用程序并与他们的其他服务(如 websolr)集成方面拥有丰富的经验。

    话虽如此,您的问题:

    获取您的数据

    如果您希望能够访问您的数据,您可以使用taps 将您的远程数据库拉到本地。这对于调试很有用。

    性能监控

    使用新的 relic RPM。这是 heroku 的一部分,您可以从附加组件菜单中启用它。

    临时数据库查询

    您可以编写一个控制器来执行任意 sql 并查看结果,但这不是我推荐的。正如建议admin_data 是管理数据的好解决方案,但如果您想做更复杂的事情,您将不得不自己编写代码。

    【讨论】:

    • 您好,jonnii,谢谢您的回答。我尝试了水龙头,但最好只在本地复制数据库以运行一些查询而不将数据添加到生产数据库(第一次初始恢复除外)。 admin_data 可以很好(如果它允许执行 SQL 代码会很棒:))但我无法添加行(考虑要添加到配置表中的数据)...我必须尝试一下我对 ActiveRecord::Base 的感觉.connection.execute “一些 sql”(正如 Sleepycat 所说)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2016-05-29
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多