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

时间:2011-05-12 16:46:53

标签: ruby-on-rails-3 heroku

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

6 个答案:

答案 0 :(得分:96)

<强>已更新

最初,这个答案指出虽然这可以通过一些技巧实现,但是强烈气馁。这是基于Heroku开发人员支持网站上的建议。然而,最近Heroku发布了专门描述如何实现这一目标的通信,并在开发者网站上淡化了他们的建议。他们的电子邮件的这一部分的完整文本包含在下面:

  

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

     

只需将多个应用的​​DATABASE_URL配置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最初的建议是创建和使用API​​远程访问数据。我个人的观点是,总的来说,在很多情况下,这是好的建议,(即不仅仅是将多个应用程序连接到同一个数据库),尽管我可以看到这样的情况会比它的价值更麻烦

<强>更新

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

答案 1 :(得分:74)

相关问题的最新答案!

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

链接:expanding_the_power_of_add_ons

答案 2 :(得分:15)

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

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

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

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

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

我所做的就是使用heroku配置获取Evening-spring-734的DATABASE_URL,然后将相同的值设置为电子星系-230的DATABASE_URL。

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

魔术吧?

答案 3 :(得分:12)

我最近在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.
     

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

答案 4 :(得分:7)

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

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

答案 5 :(得分:1)

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

  

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

     

是。您可以配置在Heroku上运行的多个应用程序进行连接   如果您拥有数据库凭据,则只能访问单个数据库。   只需覆盖您要使用的应用程序的DATABASE_URL即可   heroku配置:添加DATABASE_URL = ...命令。