web-dev-qa-db-ja.com

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

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

86
donald

[〜#〜] updated [〜#〜]

もともと、この回答は、これはいくつかのトリックで可能ではありましたが、強く落胆したと述べていました。これは、Heroku開発者サポートWebサイトのアドバイスに基づいています。ただし、最近、Herokuはこれを実現する方法を具体的に説明する通信を発行し、開発者サイトでのアドバイスを骨抜きにしました。電子メールのこのセクションの完全なテキストを以下に示します。

Herokuアプリは共通のデータベースを共有できることをご存知ですか?たとえば、ユーザー向けのコードとは別のアプリケーションに分析関数を配置できます。

複数のアプリのDATABASE_URL構成変数を同じ値に設定するだけです。まず、既存のアプリのDATABASE_URLを取得します。

$ heroku config | grep DATABASE_URL  --app sushi DATABASE_URL => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf

次に、新しいアプリのDATABASE_URLを次の値に設定します。

$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:[email protected]/ldfoiusfsf --app sushi-analytics
Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74. That's it

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

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

[〜#〜] update [〜#〜]

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

96
Paul Russell

関連する質問に対する最新の回答!

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

74
c360ian

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

[〜#〜] edit [〜#〜]心を休めるために、Herokuで2つのアプリを作成しました。タイトル付きの投稿」。

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

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

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

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

フルーティーなDBの競合状態になる可能性がありますが、それは間違いなく可能です。

魔法?

15
John Beynon

最近、Herokuニュースレターでこれを受け取りました。私は彼らに本当に承認された使用法であるかどうかを調べるために彼らにメールを送っている。

知ってますか?

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

Herokuアプリは共通のデータベースを共有できることをご存知ですか?たとえば、ユーザー向けのコードとは別のアプリケーションに分析関数を配置できます。

単にDATABASE_URLconfig var 同じ値に対する複数のアプリの場合。まず、DATABASE_URL既存のアプリの場合:

$ heroku config | grep DATABASE_URL  --app sushi
DATABASE_URL   => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf

次に、DATABASE_URLこの値に対する新しいアプリの場合:

$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:[email protected]/ldfoiusfsf --app sushi-analytics
Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf
Restarting app... done, v74.

これで、両方のアプリが1つのデータベースを共有するようになりました。

12
JoshRivers

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

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

7
Steve Wilhelm

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

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

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

1
jmk