Heroku의 두 앱간에 데이터베이스 공유


90

다른 Heroku 앱에서 앱 데이터베이스에 액세스하고 싶습니다. 공유 데이터베이스에서 가능합니까?

답변:


100

업데이트 됨

원래이 답변은 몇 가지 트릭으로 가능했지만 강력히 권장하지 않는다고 말했습니다 . 이것은 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을 업데이트해야합니다.


1
그것이 가능하다는 것을 증명하기 위해 Heroku에 앱을 설정하십시오.
John Beynon

1
공평, 반대표 철회 ... Heroku 지원은 다른 답변을 제공합니다! 질문 : 두 개의 heroku 앱을 개발하면 단일 데이터베이스에 액세스 할 수 있습니까? 제가 묻는 이유는 레일스 앱과 시나트라 앱이 있고 포스트그레스 데이터베이스를 공유해야하기 때문입니다. http로 그렇게하지 않겠습니까! heroku 지원의 답변 : 예, 필요한 경우 할 수 있습니다. 모든 Heroku 앱은 기본적으로 프로비저닝 된 데이터베이스를 가져 오지만 한 앱에서 다른 앱으로 DATABASE_URL 구성 변수를 복사하는 것만으로 한 앱이 다른 앱의 데이터베이스를 사용할 수 있습니다.
John Beynon

1
나는 반대표를 철회했지만 수락 된 답변은 FYI와 마찬가지로 여전히 정확하지 않습니다.
John Beynon

1
그들은 당신의 응용 프로그램 데이터베이스 URL을 변경할 권리가 있다고 말하고 있습니다. 그래서 이런 일이 발생하면 수동으로 사용하던 데이터베이스 URL을 변경해야합니다.
John Beynon

7
이제 앱간에 DATABASE_URL을 공유하는 공식적인 방법이 있습니다. 아래 @ c360ian의 답변을 참조하십시오 .
mobeets

82

관련 질문에 대한 최신 답변!

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


대단히 감사합니다!, 이것이 우선적 인 답변이어야합니다!
HLL

2
이것이 정답입니다. 다른 모든 답변은 더 이상 사용되지 않으며 대부분은 어쨌든 중복됩니다.
jelder

4
내가 사용한 명령의 형식은heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
Marklar

15

내가 아는 한 가능한 한 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 경쟁 조건으로 끝날 수는 있지만 확실히 가능합니다.

매직 응?


+1 : 짧거나 허영한 URL을 수행하는 데 매우 유용하다고 생각합니다. myapp.me/iwasrobbed(Heroku 앱 # 1)는 myapp.com/users/1(Heroku 앱 # 2)로 리디렉션됩니다. 이제 저장할 수 있습니다. 표준 사용자 DB의 가상 이름입니다. 감사합니다 John!
iwasrobbed

1
heroku pg : promote DATABASE_URL --app your_app_name은이 변수를 설정하는 지원되는 방법입니다.
Neil Middleton 2011

내 유일한 의견은 경쟁 조건에 대한 것입니다. 작업자와 웹 인스턴스는 철제 작업자 또는 resqueue와 같은 원격 작업자와 동일합니다.
baash05

12

최근에 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.

이제 두 앱이 하나의 데이터베이스를 공유합니다.


4
나는 무료 웹 다이노와 무료 워커 다이노를 모두 얻기 위해이 방법을 사용하는 것에 대해 Heroku에게 물었다. 여기에 그들의 반응이 있습니다. >> "Josh-우리는이 작업을 권장하지 않지만 작업자가 유휴 상태에있는 문제도있을 수 있습니다. 일단 유휴 상태가되면 작업을 중지하고 웹 요청처럼 '깨우기'작업이 없으면 일꾼 으로서는 쓸모가 없어요. "<< 같은 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.