Herokuの2つのアプリ間でデータベースを共有する


89

別のHerokuアプリからアプリのデータベースにアクセスしたい。それは共有データベースで可能ですか?

回答:


100

更新しました

当初、この回答は、これはいくつかのトリックで可能でしたが、強くお勧めできなかったと述べています。これは、Heroku開発者サポートWebサイトのアドバイスに基づいています。しかし、最近、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

—これで、両方のアプリが1つのデータベースを共有します。

参考までに、Herokuの最初のアドバイスは、データをリモートでアクセスするためのAPIを作成して使用することでした。私の個人的な見解では、全体として、多くの状況でこれは良いアドバイスです(つまり、複数のアプリケーションを同じDBに接続するよりも優れています)。

更新

この回答に関するコメントのとおり、Herokuが必要に応じてデータベースのURLを変更する権利を留保していることは注目に値します。これが発生すると、セカンダリ接続が失敗し、それに応じてURLを更新する必要があります。


1
Herokuでアプリをセットアップして、それが可能であることを証明してください。詳細は私の回答にあります。
John Beynon、

1
十分に公正で、反対票は撤回されました... Herokuサポートは別の答えを出します!質問:2つのherokuアプリを開発した場合、それらは1つのデータベースにアクセスできますか?私が尋ねる理由は、railsアプリとsinatraアプリがあり、それらはpostgresデータベースを共有する必要があるからです。むしろそれをhttpでやらない方がいいです!herokuサポートからの回答:はい、必要に応じて、できます。すべてのHerokuアプリはデフォルトでデータベースがプロビジョニングされますが、あるアプリケーションから別のアプリにDATABASE_URL構成変数をコピーするだけで、あるアプリが別のアプリのデータベースを使用することが可能です。
ジョンベイノン、

1
私は反対票を撤回しましたが、FYIと同様に、受け入れられた回答はまだ正しくありません。
ジョンベイノン、

1
彼らは彼らがあなたのアプリケーションのデータベースのURLを変更する権利を留保していると言っているので、それが起こった場合は手動で使用していたデータベースのURLを変更する必要があるでしょう。
John Beynon、

7
アプリ間でDATABASE_URLを共有する公式のheroku方法が用意されました。以下の @ c360ianによる回答を参照してください。
mobeets

81

該当する質問に対する最新の答え!

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

リンク:expanded_the_power_of_add_ons


どうもありがとう!、これが優先順位の高い答えになるはずです!
HLL、2015

2
これが正解です。他のすべての回答は非推奨であり、それらのほとんどはとにかく重複しています。
エルダー、2015

3
私が使用したコマンドの形式はheroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
Marklar '25年

15

私の知る限り可能です-DBを使用してアプリのheroku構成変数を確認し、データベースを共有するアプリのdatabase_urlを同じ値に設定する必要があります。ちょっとおかしいけど、どのようにサポートされているかはわかりません。

編集心を安らかにするために、私はHerokuで2つのアプリをスピンアップしました-タイトル付きの単純な足場「ポスト」。

http://evening-spring-734.heroku.com/postsがマスターです

http://electric-galaxy-230.heroku.com/posts-スレーブです

したがって、どちらかで作成された投稿は、evening-spring-734のデータベースURLに書き込まれます。

私がやったことは、heroku構成を使用して、evening-spring-734のDATABASE_URLを取得し、同じ値をelectric-galaxy-230のDATABASE_URLに設定することだけです。

いくつかのフルーティーなDB競合状態が発生する可能性がありますが、それが可能です。

マジック?


1:私は次のように..短期または虚栄心のURLを行うために非常に有用であるとしてこれを見るmyapp.me/iwasrobbedにリダイレクト(#1 HerokuのAPP)myapp.com/users/1今私は保存することができますので、(#2 Herokuのアプリケーション)標準ユーザーDBのバニティ名。ジョンありがとう!
iwasrobbed、2011

1
heroku pg:promote DATABASE_URL --app your_app_nameは、この変数を設定するためのサポートされている方法です。
Neil Middleton

私の唯一のコメントは、競合状態に関するものです。鉄工やリキューなどのリモートワーカーと同様に、ワーカーとWebインスタンスは同じです。
baash05 2013

12

最近これをHerokuニュースレターで受け取りました。それが本当に承認された使用法であるかどうかを確認するために、メールを送ります。

知ってますか?

1つのデータベースを多くのアプリと共有する

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.

それだけです—両方のアプリが1つのデータベースを共有します。


4
Herokuに、この方法を使用して無料のWeb dynoと無料のWorker dynoの両方を入手するよう依頼しました。これが彼らの反応です。>> "ジョシュ-これを行うことはお勧めしませんが、さらに、アイドル状態のワーカーに問題が発生します。アイドル状態になると、作業を停止し、Webリクエストのように「ウェイクアップ」するものがないため、ワーカーとしては役に立たない。」<<つまり、同じDBで複数のアプリを使用できるように見えますが、無料ではあまり役に立ちません。
JoshRivers 2011

開発目的で使用していますが、ライブアプリにはすでに何千行もあり、新しい外観は別の小さなherokuアプリで開発されているため、データを共有できるのはすばらしいです。新しい外観を開発して見ることができます。同じデータ
Dvid Silva 2013

7

Amazon RDSプラグインはこれに適しています。複数のアプリが同じRDSインスタンスを共有できます。

テーブルを共有したり、active_record.table_name_prefixを使用してテーブル名の衝突を回避したりする柔軟性があります。


1

Herokuリファレンスを参照してください:https : //devcenter.heroku.com/categories/heroku-postgres

Q:複数のHerokuアプリケーションを単一のデータベースに接続できますか?

はい。データベースの資格情報があれば、Herokuで実行されている複数のアプリケーションを構成して単一のデータベースに接続できます。heroku config:add DATABASE_URL = ...コマンドを使用して、接続するアプリのDATABASE_URLをオーバーライドするだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.