Хобрук: Ваш путь к мастерству в программировании

Запустите эмулятор функций firebase в базе данных без эмулятора базы данных (вместо этого в производственном облаке)

У меня проблемы с запуском эмулятора функций firebase в производственной базе данных. У меня есть проект, который еще не опубликован, поэтому я могу перейти к производству с любыми негативными эффектами.

В моем проекте используется только база данных реального времени, он не использует Firestore (поэтому другие вопросы по SO не актуальны). В документации указано, что триггеры Cloud Firestore и Realtime Database уже имеют достаточные учетные данные и не требуют дополнительной настройки. так что в соответствии с этим мне не нужна дополнительная настройка, чтобы указать на производственную базу данных.

Согласно всей документации по Firebase, проект должен работать с реальной базой данных firebase, если я запускаю только эмулятор функций и не запускаю эмулятор базы данных. Это предупреждение, кажется, тоже говорит об этом:

functions: следующие эмуляторы не работают, вызовы этих сервисов из эмулятора функций повлияют на производство: auth, firestore, database, hosting, pubsub

Однако этого не происходит. Вместо этого я получаю следующую ошибку:

functions [onGlobalClientRequest]: функция игнорируется, поскольку эмулятор базы данных не существует или не запущен.

Я прочитал документацию по firebase, и на самом деле ничего не упоминается, кроме установки учетных данных, которые не нужны (но я все равно устанавливаю учетные данные, используя export GOOGLE_APPLICATION_CREDENTIALS="/path/to/credentials.json" перед запуском эмулятора функций.)

onGlobalClientRequest выглядит так:

export const onGlobalClientRequest = functions.database
  .ref( client_requests_key + "/{pushedid}")
  .onCreate(
    async (
      snap: functions.database.DataSnapshot,
      context: functions.EventContext,
    ) => {
      ///.... code here...
    },
  );


Ответы:


1

Локально эмулированные функции Firebase смогут записывать в базу данных Prod, но не смогут запускаться производственной базой данных.

Вот SO-ответ сотрудника Google, в котором говорится об упомянутом выше.

Кроме того, цитата из другого SO-ответа другого сотрудника Google:

В общем, правило с эмуляторами: start состоит в том, что мы полностью эмулируем все, что работает. Так, например, если вы используете эмулятор функций и базы данных, все записи из функций (через admin.database () .... будут перенаправлены на эмулятор базы данных. Но запись в Firestore (admin.firestore () ... ) попытается запустить производство, потому что этот эмулятор не запущен.

30.12.2020

2

Операции с базой данных реального времени (RTDB) запускают функции в соответствующем проекте. Таким образом, рабочая RTDB запускает функции вашего производственного проекта, а эмулируемая RTDB запускает эмулируемые функции.

Если вы хотите протестировать функции, запускаемые операциями RTDB локально с помощью эмулятора, вы также должны использовать эмулятор RTDB. Это объясняется в документе здесь.

Если вы хотите протестировать только функции, вызываемые HTTP, вы можете использовать удаленный RTDB.

30.12.2020
  • Я ценю ваш ответ, и я прочитал ссылку, которую вы прикрепили, и на самом деле не вижу нигде, где говорится, что эмулятор функций будет работать только с эмулированной базой данных. Прилагаемая ссылка, кажется, относится только к тому, как имитировать базу данных, но я не хочу этого. Я не говорю, что вы ошибаетесь, просто ссылка, которую вы прикрепили, явно не указывает на то, что функции будут работать только с эмулятором RTDB. Спасибо. 30.12.2020
  • Новые материалы

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..