我想从另一个Heroku应用程序访问一个应用程序的数据库。在共享数据库中有可能吗?
Answers:
更新
最初,此答案表明,尽管可以通过一些技巧来实现,但强烈建议不要这样做。这是基于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远程访问数据。我个人的观点是,总的来说,在很多情况下,这是一个很好的建议(即,比仅将多个应用程序连接到同一个DB更好),尽管我看到的情况会带来更多的麻烦,而不是值得的。
更新
根据对此答案的评论,值得注意的是,Heroku保留根据需要更改数据库URL的权利。如果发生这种情况,将导致您的辅助连接失败,并且您需要相应地更新URL。
有关问题的最新答案!
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 addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
据我所知-您必须使用DB查看您的应用程序的heroku配置变量,然后将要共享数据库的应用程序上的database_url设置为相同的值。不过,我不知道Kinda是否偏离轨道以及它如何得到支持。
编辑为了让我休息,我在Heroku上启动了两个应用程序-一个带有标题的简单脚手架“发布”。
http://evening-spring-734.heroku.com/posts是大师
http://electric-galaxy-230.heroku.com/posts-是奴隶
因此,在其中任何一个上创建的帖子都将被写到Evening-spring-734的数据库URL中。
我所做的只是使用heroku config获取spring-spring-734的DATABASE_URL,然后将相同的值设置到electric-galaxy-230的DATABASE_URL中。
您可能最终会遇到一些富有成效的数据库争用条件,但是绝对可以做到。
魔术吧?
我最近在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.
就是这样-现在两个应用程序将共享一个数据库。
参见Heroku参考:https : //devcenter.heroku.com/categories/heroku-postgres
问:多个Heroku应用程序可以连接到单个数据库吗?
是。您可以将Heroku上运行的多个应用程序配置为连接到单个数据库,只要您具有数据库凭据即可。只需使用heroku config:add DATABASE_URL = ...命令覆盖要连接的应用程序的DATABASE_URL。