2011-05-12 172 views

回答

95

修订

原来,这个回答说,虽然这是可能的一些技巧,这是强烈劝阻。这是基于Heroku开发者支持网站的建议。然而,最近Heroku发布了一个专门描述如何实现这一目的的沟通,并在开发者网站上淡化了他们的建议。这部分电子邮件的完整文本内容如下:

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

只需将多个应用程序的DATABASE_URL config var设置为相同的 值。首先,获得DATABASE_URL为您现有的应用程序:

$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5F[email protected]/ldfoiusfsf 

然后,对于新的应用程序的DATABASE_URL设置为这个值:

$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:[email protected]/ldfoiusfsf --app sushi-analytics 
Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74. That's it 

- 现在这两个应用将共享一个数据库。

作为一个参考点,Heroku最初的建议是创建和使用API​​来远程访问数据。我个人的观点是,总体而言,在很多情况下,这是好建议(即比将多个应用程序连接到相同的数据库更好),尽管我可以看到哪些情况比其值得更麻烦。

UPDATE

按照这个答案的意见,这是值得注意的是,Heroku的做保留根据需要更改数据库URL的权利。如果发生这种情况,它会导致您的辅助连接失败,并且您需要相应地更新URL。

+1

刚刚安装的应用程序,以证明这是可能的 - 细节在我的回应。 – 2011-05-12 19:33:59

+0

@John Coo - 有趣:)不确定严格说,值得downvote! Heroku明确禁止在他们的开发人员文档中使用,这意味着它可能会在未来的某个时候意外中断... – 2011-05-12 20:00:47

+1

公平不够,向下撤回投票... Heroku支持给出不同的答案! 问题:如果我开发两个heroku应用程序,他们可以访问一个单一的 数据库吗?我问的原因是我们有一个rails应用程序和一个sinatra 应用程序,他们需要共享一个postgres数据库。宁可不要做 那个由http! Answerku支持:是的,如果你需要的话,你可以。每个Heroku 应用程序都获取默认设置的数据库,但一个 应用程序可以使用其他应用程序的数据库,只需将DATABASE_URL config var从一个应用程序复制到另一个。 – 2011-05-13 08:10:35

15

据我所知,这是可能的 - 你必须在数据库中查看你的应用程序的heroku配置变量,然后在想要共享数据库的应用程序上设置database_url为相同的值。虽然有点偏离,但我不知道它是如何得到支持的。

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

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

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

所以,无论是上创建的信息将被写入到晚上弹簧-734的数据库URL。

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

你可能会遇到一些果味的DB竞争条件,但它绝对有可能做到。

魔法吧?

+0

+1:我认为这对于做短或虚名网址非常有用..像http://myapp.me/iwasrobbed(Heroku App#1)重定向到http://myapp.com/users/1(Heroku应用程序#2),因为现在我可以将标示名称存储在标准用户数据库中。谢谢约翰! – iwasrobbed 2011-08-12 22:34:00

+1

heroku pg:宣传DATABASE_URL --app your_app_name是设置此变量的支持方式。 – 2011-12-18 15:52:56

+0

我唯一的评论就是竞争条件。工人和网络实例将是一样的,远程工作者像铁工或重新雇佣。 – baash05 2013-02-05 04:33:32

7

Amazon RDS插件适用于此目的。多个应用程序可以共享相同的RDS实例。

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

12

我最近在Heroku通讯中收到了这个消息。我正在通过电子邮件发送它们以确定它是否确实是已批准的使用情况。

您知道吗?

与许多应用程序

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

只需将多个应用程序的DATABASE_URLconfig var设置为相同的值即可。首先,获得DATABASE_URL为您现有的应用程序:

$ heroku config | grep DATABASE_URL --app sushi 
DATABASE_URL => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf 

然后,对于新的应用程序设置DATABASE_URL这个值:

$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:[email protected]/ldfoiusfsf --app sushi-analytics 
Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf 
Restarting app... done, v74. 

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

+4

我问Heroku有关使用这种方法来获得一个免费的网络测试仪和免费的工人测试仪。这是他们的回应。 >>“乔希 - 我们不鼓励这样做,但此外还会有 与工作人员闲置问题。一旦它闲置,它会 停止做任何工作,并没有什么可以唤醒它像一个网络 请求,它将作为工作者是无用的。“<< 因此,它看起来像你可以在同一个数据库上使用多个应用程序,但它不是非常有用的免费。 – JoshRivers 2011-07-18 20:35:10

+0

我将它用于开发目的,我的应用程序中已经有成千上万的行,并且新的appeareance正在另一个更小的heroku应用程序中开发,所以能够共享数据很酷,我可以开发并看到新的外观相同的数据 – 2013-05-06 01:06:16

2

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

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

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

72

对相关问题的最新解答!

Heroku现在正式支持更好/优雅的解决方案。在他们的最新时事通讯中描述了如何在应用程序之间共享插件。以下是在书面记录中提到的片段:

$ 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 expanding_the_power_of_add_ons

+0

非常感谢!,这应该是优先回答! – HLL 2015-04-28 21:16:29

+2

这是正确的答案。所有其他答案都被弃用,而且大多数答案都是重复的。 – jelder 2015-08-07 14:20:30

+2

我使用的命令格式是'heroku addons:attach originating_app_name :: HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name' – Marklar 2016-05-25 00:34:21

相关问题