【问题标题】:Share database between 2 apps in Heroku在 Heroku 中的 2 个应用程序之间共享数据库
【发布时间】:2011-08-24 07:14:59
【问题描述】:

我想从另一个 Heroku 应用程序访问一个应用程序的数据库。在共享数据库中可以吗?

【问题讨论】:

    标签: ruby-on-rails-3 heroku


    【解决方案1】:

    更新

    最初,这个答案表明虽然通过一些技巧可以做到这一点,但强烈不鼓励这样做。这是基于 Heroku 开发者支持网站上的建议。然而,最近 Heroku 发布了一份专门描述如何实现这一目标的通信,并淡化了他们在开发者网站上的建议。他们电子邮件的这一部分的完整文本包括在下面:

    您知道 Heroku 应用程序可以 共享一个通用数据库?例如,您可以将分析功能 在与面向用户的代码不同的应用程序中。

    只需将多个应用的​​ DATABASE_URL 配置变量设置为相同 价值。首先,获取现有应用的 DATABASE_URL:

    $ heroku config | grep DATABASE_URL  --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute1.amazonaws.com/ldfoiusfsf
    

    然后,将新应用的 DATABASE_URL 设置为此值:

    $ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf --app sushi-analytics
    Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74. That's it
    

    ——现在两个应用程序将共享一个数据库。

    作为参考,Heroku 最初的建议是创建和使用 API 来远程访问数据。我个人的观点是,总体而言,在许多情况下,这是好建议,(即比仅仅将多个应用程序连接到同一个数据库更好)虽然我可以看到这样的情况比它的价值更麻烦.

    更新

    根据 cmets 对此答案的看法,值得注意的是 Heroku 确实保留根据需要更改数据库 URL 的权利。如果发生这种情况,将导致您的辅助连接失败,您需要相应地更新 URL。

    【讨论】:

    • 只需在 Heroku 上设置应用程序以证明这是可能的 - 我的回复中有详细信息。
    • 很公平,否决票已撤回...Heroku 支持给出了不同的答案!问题:如果我开发了两个 Heroku 应用程序,它们可以访问一个数据库吗?我问的原因是我们有一个 rails 应用程序和一个 sinatra 应用程序,它们需要共享一个 postgres 数据库。宁愿不要通过http来做!来自 heroku 支持的回答:是的,如果你需要,你可以。每个 Heroku 应用程序都会默认配置一个数据库,但是一个应用程序可以通过将 DATABASE_URL 配置变量从一个应用程序复制到另一个应用程序来使用另一个应用程序的数据库。
    • 我撤回了反对票,但作为仅供参考,接受的答案仍然不正确。
    • 他们确实说他们保留更改您的应用程序数据库 URL 的权利,因此如果发生这种情况,您需要手动更改您使用的数据库 URL。
    • 现在有一种官方的 Heroku 方式可以在应用程序之间共享 DATABASE_URL。查看@c360ian below的答案。
    【解决方案2】:

    相关问题的最新答案!

    Heroku 现在通过他们的插件框架正式支持更好/优雅的解决方案。他们在最新的时事通讯中描述了如何在应用程序之间共享插件。以下是文章中提到的sn-ps:

    $ heroku addons:attach my-sushi-db -a my-sushi-reporting --as MAIN_SUSHI_DB    
      Adding MAIN_SUSHI_DB to my-sushi-reporting... done
      Setting MAIN_SUSHI_DB vars and restarting my-sushi-app-reporting... done, v3
    

    链接:expanding_the_power_of_add_ons

    【讨论】:

    • 非常感谢!这应该是优先的答案!
    • 这是正确的答案。所有其他答案都已弃用,而且大多数都是重复的。
    • 我使用的命令格式是heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
    【解决方案3】:

    据我所知,这是可能的 - 您必须使用数据库查看应用程序的 heroku 配置变量,然后将要共享数据库的应用程序上的 database_url 设置为相同的值。不过有点偏离轨道,我不知道它的支持程度。

    编辑为了让我安心,我在 Heroku 上创建了两个应用程序 - 一个带有标题的简单脚手架“帖子”。

    http://evening-spring-734.heroku.com/posts 是主人

    http://electric-galaxy-230.heroku.com/posts - 是奴隶

    因此,在其中任何一个上创建的帖子都将写入 night-spring-734 的数据库 URL。

    我所做的只是使用 heroku 配置来获取 night-spring-734 的 DATABASE_URL,然后将相同的值设置为electric-galaxy-230 的 DATABASE_URL。

    您最终可能会遇到一些果味十足的 DB 竞争条件,但这绝对是可能的。

    魔法吧?

    【讨论】:

    • +1:我认为这对于创建短 URL 或虚 URL 非常有用。就像 myapp.me/iwasrobbed(Heroku 应用程序 #1)重定向到 myapp.com/users/1(Heroku 应用程序 #2),因为现在我可以将虚名存储在标准用户数据库中。谢谢约翰!
    • heroku pg:promote DATABASE_URL --app your_app_name 是设置此变量的支持方式。
    • 我唯一的评论是竞争条件。工人和 Web 实例将是相同的,就像铁工人或 resqueue 等远程工人一样。
    【解决方案4】:

    我最近在 Heroku 时事通讯中收到了这个消息。我正在向他们发送电子邮件,以了解它是否真的被批准使用。

    你知道吗?

    与多个应用共享一个数据库

    您知道 Heroku 应用程序可以共享一个公共数据库吗?例如,您可以将分析功能与面向用户的代码放在一个单独的应用程序中。

    只需将多个应用的​​DATABASE_URLconfig var 设置为相同的值。首先,为您现有的应用获取DATABASE_URL

    $ heroku config | grep DATABASE_URL  --app sushi
    DATABASE_URL   => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf
    

    然后,将新应用的 DATABASE_URL 设置为此值:

    $ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf --app sushi-analytics
    Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf
    Restarting app... done, v74.
    

    就是这样 - 现在两个应用程序将共享一个数据库。

    【讨论】:

    • 我向 Heroku 询问了如何使用这种方法来获得一个免费的 Web dyno 和一个免费的 Worker dyno。这是他们的回应。 >>“乔希 - 我们不鼓励这样做,但另外会有工人闲置的问题。一旦闲置,它将停止做任何工作,并且没有任何东西可以像网络请求一样“唤醒”它,它会是作为工人没用。”
    • 我将它用于开发目的,我的实时应用程序中已经有数千行,并且正在另一个较小的 Heroku 应用程序中开发新外观,所以能够共享数据很酷,我可以使用相同的数据开发并查看新外观
    【解决方案5】:

    Amazon RDS 插件适用于此。多个应用可以共享同一个 RDS 实例。

    您可以灵活地让他们共享表或使用 active_record.table_name_prefix 避免表名冲突。

    【讨论】:

      【解决方案6】:

      参见 Heroku 参考:https://devcenter.heroku.com/categories/heroku-postgres

      问:多个 Heroku 应用程序可以连接到一个数据库吗?

      是的。您可以配置在 Heroku 上运行的多个应用程序进行连接 到单个数据库,前提是您具有数据库凭据。 只需覆盖您希望连接的应用程序的 DATABASE_URL heroku config:add DATABASE_URL=... 命令。

      【讨论】:

        猜你喜欢
        • 2013-01-10
        • 2011-10-26
        • 2012-05-10
        • 1970-01-01
        • 2013-04-09
        • 2012-12-30
        • 1970-01-01
        相关资源
        最近更新 更多