【发布时间】:2011-08-24 07:14:59
【问题描述】:
我想从另一个 Heroku 应用程序访问一个应用程序的数据库。在共享数据库中可以吗?
【问题讨论】:
我想从另一个 Heroku 应用程序访问一个应用程序的数据库。在共享数据库中可以吗?
【问题讨论】:
更新
最初,这个答案表明虽然通过一些技巧可以做到这一点,但强烈不鼓励这样做。这是基于 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 现在通过他们的插件框架正式支持更好/优雅的解决方案。他们在最新的时事通讯中描述了如何在应用程序之间共享插件。以下是文章中提到的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
【讨论】:
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
据我所知,这是可能的 - 您必须使用数据库查看应用程序的 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 竞争条件,但这绝对是可能的。
魔法吧?
【讨论】:
我最近在 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.就是这样 - 现在两个应用程序将共享一个数据库。
【讨论】:
Amazon RDS 插件适用于此。多个应用可以共享同一个 RDS 实例。
您可以灵活地让他们共享表或使用 active_record.table_name_prefix 避免表名冲突。
【讨论】:
参见 Heroku 参考:https://devcenter.heroku.com/categories/heroku-postgres
问:多个 Heroku 应用程序可以连接到一个数据库吗?
是的。您可以配置在 Heroku 上运行的多个应用程序进行连接 到单个数据库,前提是您具有数据库凭据。 只需覆盖您希望连接的应用程序的 DATABASE_URL heroku config:add DATABASE_URL=... 命令。
【讨论】: