[ruby-on-rails-3] Heroku의 두 앱간에 데이터베이스 공유

다른 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를 생성하고 사용하여 원격으로 데이터에 액세스하는 것이 었습니다. 제 개인적인 견해는 전반적으로 많은 상황에서 이것은 좋은 조언입니다 (즉, 동일한 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

링크 : expanding_the_power_of_add_ons


답변

내가 아는 한 가능한 한 DB로 앱의 heroku 구성 변수를 살펴본 다음 데이터베이스를 공유하려는 앱에서 database_url을 동일한 값으로 설정해야합니다. 그래도 조금 벗어 났고 어떻게 지원되는지 모르겠습니다.

편집 마음을 쉬게하기 위해 Heroku에서 제목이있는 간단한 비계 ‘포스트’라는 두 개의 앱을 만들었습니다.

http://evening-spring-734.heroku.com/posts 가 마스터입니다.

http://electric-galaxy-230.heroku.com/posts- 노예입니다

따라서 둘 중 하나에 작성된 게시물은 저녁 봄 734의 데이터베이스 URL에 기록됩니다.

내가 한 것은 heroku 구성을 사용하여 저녁 봄 -734의 DATABASE_URL을 가져온 다음 electric-galaxy-230의 DATABASE_URL에 동일한 값을 설정하는 것입니다.

결실을 맺은 DB 경쟁 조건으로 끝날 수는 있지만 확실히 가능합니다.

매직 응?


답변

최근에 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_prefix를 사용하여 테이블을 공유하거나 테이블 이름 충돌을 피할 수있는 유연성이 있습니다.


답변

Heroku 참조 참조 : https://devcenter.heroku.com/categories/heroku-postgres

Q : 여러 Heroku 애플리케이션을 단일 데이터베이스에 연결할 수 있습니까?

예. 데이터베이스 자격 증명이있는 경우 Heroku에서 실행되는 여러 애플리케이션을 단일 데이터베이스에 연결하도록 구성 할 수 있습니다. heroku config : add DATABASE_URL = … 명령을 사용하여 연결하려는 앱의 DATABASE_URL을 재정의하면됩니다.


답변