我想从另一个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
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
。 - Marklar最近我在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.
就这样,现在这两个应用程序将共享一个数据库。
因此,看起来您可以在同一个DB上使用多个应用程序,但是这对于免费用户来说并不是很有用。 - JoshRivers“Josh-我们不鼓励这样做,而且还会有worker被闲置的问题。一旦它被闲置,它就不会再执行任何工作,并且没有类似于web请求的东西来“唤醒”它,作为worker它将变得无用。”<<
请参考Heroku文档:https://devcenter.heroku.com/categories/heroku-postgres
问:多个Heroku应用程序可以连接到单个数据库吗?
可以。只要您拥有数据库凭据,就可以配置在Heroku上运行的多个应用程序连接到单个数据库。 只需使用heroku config:add DATABASE_URL=...命令覆盖要连接的应用程序的DATABASE_URL即可。