別のHerokuアプリからアプリのデータベースにアクセスしたい。それは共有データベースで可能ですか?
回答:
更新しました
当初、この回答は、これはいくつかのトリックで可能でしたが、強くお勧めできなかったと述べています。これは、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を更新する必要があります。
該当する質問に対する最新の答え!
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を同じ値に設定する必要があります。ちょっとおかしいけど、どのようにサポートされているかはわかりません。
編集心を安らかにするために、私は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競合状態が発生する可能性がありますが、それが可能です。
マジック?
最近これを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つのデータベースを共有します。
Amazon RDSプラグインはこれに適しています。複数のアプリが同じRDSインスタンスを共有できます。
テーブルを共有したり、active_record.table_name_prefixを使用してテーブル名の衝突を回避したりする柔軟性があります。
Herokuリファレンスを参照してください:https : //devcenter.heroku.com/categories/heroku-postgres
Q:複数のHerokuアプリケーションを単一のデータベースに接続できますか?
はい。データベースの資格情報があれば、Herokuで実行されている複数のアプリケーションを構成して単一のデータベースに接続できます。heroku config:add DATABASE_URL = ...コマンドを使用して、接続するアプリのDATABASE_URLをオーバーライドするだけです。