Как я могу инициализировать firebase подпружиненное приложение, размещенное на google app-engine - PullRequest
0 голосов
/ 21 сентября 2019

Я работаю над приложением, использующим Spring-boot в качестве бэкэнда, который хранит данные в базе данных Firebase в реальном времени.

Приложение работает нормально, когда я запускаю его локально, сохраняя данные в базе данных, однако при развертыванииэто на app-engine, я продолжаю получать эту ошибку, когда отправляю запрос с помощью Почтальона FirebaseApp with name [DEFAULT] doesn't exist.

Я выполнил шаги, описанные в https://firebase.google.com/docs/admin/setup, чтобы настроитьпроект.Я использовал учетные данные учетной записи службы и сослался на них в своем основном классе Java следующим образом:

FileInputStream serviceAccount =
            new FileInputStream("src/main/resources/credentials.json");



    FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredentials(GoogleCredentials.fromStream(serviceAccount))
            .setProjectId("my project id")
            .setDatabaseUrl("my database url")
            .build();

    FirebaseApp.initializeApp(options);

Я также попытался сохранить путь как переменную среды следующим образом:

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/credentials.json"

Это все ещене работал на app-engine.Кто-нибудь, спаси меня

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019

Я наконец разобрался с решением.Проблема принесла мне способ упаковки и развертывания моего проекта.Файл jar в app-engine не обновлялся каждый раз, когда я развертывал новую версию, и это было из-за команды, которую я использовал.Таким образом, ошибка была отображена, потому что моя самая первая версия не имела учетных данных.

Команда, которая не обновила файл jar:

mvn appengine:deploy

Команда, которая обновила мой файл jar:

mvn clean package appengine:deploy -P cloud-gcp

Надеюсь, это поможет кому-то еще.

0 голосов
/ 22 сентября 2019

Это хитрый.Переменная env GOOGLE_APPLICATION_CREDENTIALS работает только в проекте Google Cloud Engine, а не в AppEngine.

Одно из решений - сделать файл учетных данных частью war и извлечь файл, используя ServletContext.getResourceAsStream

Один пример, где я использовал этот шаблон в Maven Project.

  1. POM-файл, чтобы сделать файл учетных данных частью WAR: https://github.com/yagnyam-in/sms-gateway-backend/blob/master/pom.xml#L262
  2. Извлечение учетных данных в исходном коде: https://github.com/yagnyam-in/sms-gateway-backend/blob/master/src/main/kotlin/in/yagnyam/sms_gateway/services/FirebaseService.kt#L38

Предупреждение: Если вы отправляете этот файл войны на какой-либо артефактный сайт, файл учетных данных становится доступным для всех, поскольку теперь он является частью файла войны.

Надеждаэто помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...