Chcę uzyskać dostęp do bazy danych aplikacji z innej aplikacji Heroku. Czy to możliwe we wspólnej bazie danych?
źródło
Chcę uzyskać dostęp do bazy danych aplikacji z innej aplikacji Heroku. Czy to możliwe we wspólnej bazie danych?
AKTUALIZACJA
Oryginalnie ta odpowiedź stwierdzała, że chociaż było to możliwe za pomocą kilku sztuczek, zdecydowanie odradzano. Zostało to oparte na poradach na stronie wsparcia dla programistów Heroku. Jednak ostatnio Heroku wydało komunikat szczegółowo opisujący, jak to osiągnąć, i rozwodniło ich porady w witrynie programistów. Pełny tekst tej sekcji ich wiadomości e-mail znajduje się poniżej:
Czy wiesz, że aplikacje Heroku mogą współużytkować wspólną bazę danych? Na przykład możesz umieścić funkcje analityczne w oddzielnej aplikacji niż kod widoczny dla użytkownika.
Po prostu ustaw zmienną konfiguracyjną DATABASE_URL dla kilku aplikacji na tę samą wartość. Najpierw pobierz DATABASE_URL dla swojej istniejącej aplikacji:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf
Następnie ustaw DATABASE_URL dla nowych aplikacji na tę wartość:
$ 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
- teraz obie aplikacje będą współdzielić jedną bazę danych.
Jako punkt odniesienia, oryginalna rada Heroku polegała na stworzeniu i używaniu API do zdalnego dostępu do danych. Osobiście uważam, że ogólnie rzecz biorąc, w wielu sytuacjach jest to dobra rada uważam, (tj. Lepsza niż zwykłe podłączanie wielu aplikacji do tej samej bazy danych), chociaż widzę sytuacje, w których byłoby to bardziej kłopotliwe niż warte.
AKTUALIZACJA
Zgodnie z komentarzami do tej odpowiedzi, warto zauważyć, że Heroku zastrzega sobie prawo do zmiany adresów URL bazy danych zgodnie z wymaganiami. W takim przypadku spowoduje to awarię połączeń pomocniczych i konieczne będzie odpowiednie zaktualizowanie adresów URL.
Późna odpowiedź na stosowne pytanie!
Heroku oficjalnie wspiera teraz lepsze / wdzięczne rozwiązanie dzięki ich frameworkowi dodatków. W ich najnowszym biuletynie opisano, jak udostępniać dodatki między aplikacjami. Poniżej znajdują się fragmenty wspomniane w artykule:
$ 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
Link: expanding_the_power_of_add_ons
źródło
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
o ile wiem, że jest to możliwe - musisz spojrzeć na zmienne konfiguracyjne heroku dla swojej aplikacji z bazą danych, a następnie ustawić database_url w aplikacji, która chce udostępniać bazę danych na tę samą wartość. Jednak trochę poza ścieżką i nie wiem, jak jest obsługiwany.
EDYTOWAĆ Żeby uspokoić umysł, stworzyłem na Heroku dwie aplikacje - prosty „post” na rusztowaniu z tytułem.
http://evening-spring-734.heroku.com/posts jest mistrzem
http://electric-galaxy-230.heroku.com/posts - jest niewolnikiem
Więc posty utworzone na którymkolwiek z nich będą zapisywane na adres URL bazy danych wieczór-wiosna-734.
Wszystko, co zrobiłem, to użyć konfiguracji heroku, aby uzyskać DATABASE_URL z wieczór-wiosna-734, a następnie ustawić tę samą wartość w DATABASE_URL w electric-galaxy-230.
Możesz skończyć z pewnymi owocowymi warunkami wyścigu DB, ale zdecydowanie jest to możliwe.
Magia, co?
źródło
Niedawno otrzymałem to w biuletynie Heroku. Wysyłam im e-maile, aby dowiedzieć się, czy rzeczywiście jest to zatwierdzone użycie.
źródło
Wtyczka Amazon RDS działa dobrze w tym celu. Wiele aplikacji może współużytkować tę samą instancję RDS.
Masz swobodę współdzielenia tabel lub unikania kolizji nazw tabel przy użyciu przedrostka active_record.table_name_prefix.
źródło
Zobacz odniesienie do Heroku: https://devcenter.heroku.com/categories/heroku-postgres
źródło