我想从另一个 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 来远程访问数据。我个人的观点是,总的来说,在许多情况下,这是一个很好的建议(即比将多个应用程序连接到同一个数据库更好),尽管我可以看到这种情况会比它的价值更麻烦。
更新
根据对此答案的评论,值得注意的是,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
链接: expanding_the_power_of_add_ons
我所知 - 您必须使用数据库查看应用程序的 heroku 配置变量,然后在想要共享数据库的应用程序上设置database_url相同的值。虽然有点偏离轨道,至于它有多支持我不知道。
编辑 为了让我放心,我在 Heroku 上启动了两个应用程序 - 一个简单的带有标题的脚手架"帖子"。
http://evening-spring-734.heroku.com/posts 是主人
http://electric-galaxy-230.heroku.com/posts - 是奴隶
因此,在任何一个上创建的帖子都将写入 night-spring-734 的数据库 URL。
我所做的只是使用 heroku 配置来获取傍晚春季-734 的DATABASE_URL,然后将相同的值设置为电星系-230 的DATABASE_URL。
您最终可能会得到一些果味丰富的数据库竞争条件,但绝对可以做到。
魔法吧?
我最近在Heroku通讯中收到了这个。我正在向他们发送电子邮件,以了解它是否真的是批准的用途。
你知道吗?
与多个应用共享一个数据库
您知道 Heroku 应用程序可以共享一个通用数据库吗?例如,您可以将分析函数放在与面向用户的代码不同的应用程序中。
只需将多个应用程序的
DATABASE_URL
配置变量设置为相同的值即可。首先,获取现有应用的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_前缀避免表名冲突。
参见 Heroku 参考: https://devcenter.heroku.com/categories/heroku-postgres
问:多个 Heroku 应用程序可以连接到单个数据库吗?
是的。您可以配置在 Heroku 上运行的多个应用程序进行连接到单个数据库,前提是您具有数据库凭据。只需覆盖您希望连接的应用程序的DATABASE_URLHeroku 配置:添加 DATABASE_URL=...命令。