Chcę uzyskać dostęp do bazy danych aplikacji z innej aplikacji Heroku. Czy to możliwe we wspólnej bazie danych?
Odpowiedzi:
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:5FSLVUSLLT123@ec2-123-456-78-90.compute1.amazonaws.com/ldfoiusfsf
Następnie ustaw DATABASE_URL dla nowych aplikacji na tę wartość:
$ 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
- 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
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?
Niedawno otrzymałem to w biuletynie Heroku. Wysyłam im e-maile, aby dowiedzieć się, czy rzeczywiście jest to zatwierdzone użycie.
CZY WIEDZIAŁEŚ?
Udostępnianie jednej bazy danych wielu aplikacjom
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
DATABASE_URL
zmienną konfiguracyjną dla kilku aplikacji na tę samą wartość. Najpierw pobierzDATABASE_URL
dla swojej istniejącej aplikacji:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf
Następnie ustaw
DATABASE_URL
dla nowych aplikacji tę wartość:
$ 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.
To wszystko - teraz obie aplikacje będą współdzielić jedną bazę danych.
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.
Zobacz odniesienie do Heroku: https://devcenter.heroku.com/categories/heroku-postgres
P: Czy wiele aplikacji Heroku może łączyć się z jedną bazą danych?
Tak. Możesz skonfigurować wiele aplikacji działających w Heroku do łączenia się z pojedynczą bazą danych, pod warunkiem, że masz poświadczenia bazy danych. Po prostu nadpisz DATABASE_URL aplikacji, z którymi chcesz się połączyć, używając polecenia heroku config: add DATABASE_URL = ...