Облачные функции - Как создать глобальные функции / переменные только один раз? - PullRequest
0 голосов
/ 09 марта 2019

У меня есть приложение Firebase, которое использует облачные функции для связи с экземпляром Google Cloud SQL.Эти облачные функции используются для выполнения действий CRUD.Я хотел бы убедиться, что база данных отражает операции CRUD, поэтому запускайте код миграции каждый раз, когда я нажимаю новый код функции, чтобы убедиться, что база данных всегда актуальна.

Я делаю это в глобальной функции

const functions = require('firebase-functions')
const pg = require('pg')    

// Create if not exists database
(function() {
    console.log('create db...')
})()

exports.helloWorld = functions.https.onRequest((request, response) => {
    console.log('Hello from Firebase function log!')
    response.send('Hello from Firebase!')
})

exports.helloWorld2 = functions.https.onRequest((request, response) => {
    console.log('Hello from Firebase function log 2!')
    response.send('Hello from Firebase 2!')
})

Этот консольный журнал запускается дважды при развертывании.

Теперь я понимаю, что невозможно узнать, сколькоэкземпляры Cloud Functions будут ускоряться для функций, как указано в их документах:

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

Если я добавлю третью функцию, этот журнал консоли теперь будет показан 3 раза в журналах, вместо 2, по одному для каждой функции. Правильно ли будет сказать, что для каждой загруженной функции есть новый экземпляр? Я пытаюсь понять, что происходит, когда я загружаю набор облачных функций.

Если так- нет ли надежного способа запуска кода миграции внутри глобальной функции в облачных функциях?

1 Ответ

1 голос
/ 09 марта 2019

То, что вы делаете, не поддерживается сценарием использования облачных функций. Код Cloud Functions запускается в ответ на события, которые происходят в вашем проекте. При развертывании не происходит одноразовых вызовов функций. Если вам нужно запустить код один раз, просто запустите его со своего рабочего стола или с другого сервера, которым вы управляете.

Вы также должны стремиться минимизировать объем работы, выполняемой в глобальном объеме ваших функций. Глобалы будут создаваться и запускаться один раз для каждой функции в вашем приложении, так как каждая функция работает в полной изоляции друг от друга, и у каждой есть своя копия всего. Посмотрите мое видео о функции масштабирования и изоляции , чтобы лучше понять это поведение.

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