Spring Boot nie można skopiować bazy danych apki na Heroku do innej apki

0

Nie znalazłem nigdzie w Internecie rozwiązania tego problemu. Celem moim jest posiadanie z punktu widzenia użytkownika nieprzerwanego dostępu do aplikacji, co czynię poprzez posiadanie 2 kont na Heroku, z 2 apkami z identycznym kodem i przełączaniem między nimi w połowie miesiąca (na drugą) i na początku (na pierwszą), takie jest moje założenie. W wersji free posiadanie 1 apki i nieprzerwanego dostępu (bez usypiania) jest niemożliwe, stąd moje kombinacje.

W związku z tym chcę wykonać kopię bazy danych z jednej apki na Heroku, na drugą, identyczną apkę na Heroku w określonym czasie (dlatego używam adnotacji @Scheduled). Jeśi użyję komendy: heroku pg:copy MY_APP1::DATABASE_URL DATABASE_URL --app MY_APP2 lokalnie na konsoli, wszystko się kopiuje poprawnie. Teraz chcę zautomatyzować tego taska.

Oto mój kod (coś w nim jest jeszcze nie tak):

    @Scheduled(cron = "0 0/1 * * * *")
    public void copyDatabaseToSecondApp() {
        System.out.println("copyDatabaseToSecondApp()");
        ProcessBuilder pb;
        try {
            pb = new ProcessBuilder("/bin/bash", "-c", "heroku pg:copy MY_APP1::DATABASE_URL DATABASE_URL --app MY_APP2");
            pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
            pb.redirectError(ProcessBuilder.Redirect.INHERIT);
            pb.start();
        } catch (Exception e) {
            System.out.println("copyException " + e.getMessage());
        }
    }

Oczywiście normalnie zmienię wartość tego crona aby działał zgodnie z założeniem z początku, teraz jest tylko do celów demonstracyjnych.

pb.start() mi zwraca "/bin/bash: heroku: command not found"

Skoro nie znaleziono, to próbowałem sudo snap install --classic heroku (tak zalecają na oficjalnej stronie: https://devcenter.heroku.com/articles/heroku-cli), ale tam wyskoczył błąd, że nie znaleziono sudo, chciałem zainstalować sudo, to że nie ma pobranych repozytoriów czy coś, chciałem je pobrać, to potem wyświetlił, że read only file system.

Jak więc naprawić, aby pb.start() poprawnie kopiował bazę z jednej aplikacji do drugiej?

Dzięki z góry!

0

chciałem zainstalować sudo

No to grubo ;)

Może po prostu nie masz heroku w tym swoim dockerze czy jak to odpalasz.

0

Może netlify? Tam mają przynajmniej domeny za free

0
  1. Wątpie żebyś mógł używać sudo na heroku
  2. W ogóle czym jest ta komenda heroku którą tam chcesz odpalić? Sprawdziłeś może co się woła jak jej używasz i skąd się ona bierze? Może ona jest dostępna tylko dla konkretnego usera, albo wymaga czegoś w PATH? Twoja aplikacja pewnie działa z zupełnie innego usera
  3. Jak zrobisz w konsoli bash -c "..." tak jak próbujesz zrobić z aplikacji to też działa? To sprawdź jeszcze jakim userem jesteś ty i jakim jest aplikacja

1 użytkowników online, w tym zalogowanych: 0, gości: 1