在Heroku的2个应用程序之间共享数据库

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

更新

原来,这个答案说,虽然这是可能的几个技巧,但是强烈的不鼓励。 这是基于Heroku开发者支持网站的build议。 然而,Heroku最近发布了一个具体描述如何实现这一目标的沟通,并在开发者网站上淡化了他们的build议。 他们电子邮件的这一部分的完整文本包括如下:

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

只需将几个应用程序的DATABASE_URL config var设置为相同的值即可。 首先,获取您现有应用的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最初的build议是创build和使用API​​来远程访问数据。 我个人的观点是,总的来说,在很多情况下,这是一个好的build议 ,(比将多个应用程序连接到同一个数据库更好),尽pipe我可以看到情况会比其值得的更麻烦。

UPDATE

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

有关问题的最新答案!

Heroku现在正式支持通过其插件框架的更好/优雅的解决scheme。 这是在他们的最新时事通讯如何共享应用程序之间的插件。 下面是在写作中提到的片段:

 $ 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

据我所知,这是可能的 – 你必须看看你的应用程序与数据库herokuconfigurationvariables,然后设置在想要共享数据库的应用程序的database_url相同的值。 虽然有点偏离,我不知道如何支持。

编辑只是为了设置我的想法在rest我已经分解了Heroku上的两个应用程序 – 一个简单的脚手架“职位”的标题。

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

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

因此,任何一个创build的post都会写入到evening-spring-734的数据库URL中。

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

你可能会结束一些果味的DB竞赛条件,但是这绝对是可以做到的。

魔术吧?

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

你知道吗?

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

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

只需将几个应用程序的DATABASE_URL config 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. 

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

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

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

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

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

是。 您可以将运行在Heroku上的多个应用程序configuration为连接到单个数据库,前提是您拥有数据库凭据。 只需使用herokuconfiguration覆盖要连接的应用程序的DATABASE_URL:add DATABASE_URL = …命令。