Хостинг Firebase с облачными функциями - как очистить / обновить кэш CDN? - PullRequest
0 голосов
/ 13 октября 2018

Я следую инструкциям из этого видео, и пока все работает идеально, вплоть до того момента, когда мне нужно очистить CDN от старого HTML:

https://www.youtube.com/watch?v=7_2CJs_VZk4

До сих пор я создал статическую HTML-страницу с использованием облачных функций Firebase, и она хранится в облачном хранилище Firebase.Всякий раз, когда данные из моей базы данных Firebase обновляются, новая и обновленная статическая HTML-страница отображается и сохраняется в облачном хранилище.

Хостинг Firebase обслуживает эту статическую HTML-страницу и сохраняется в CDN.Согласно приведенному выше видео, я установил длительное время обновления для CDN, потому что я хочу, чтобы оно обновлялось только при внесении изменений в данные в базе данных Firebase (без обновления CDN, если не было внесено никаких изменений)

Чтобы это работало, при обновлении страницы старую HTML-страницу, хранящуюся в CDN, необходимо очистить и заменить новой HTML-страницей.

Видео во время 33:19 предлагает следующий код:

const purgeUrl = `${ORIGIN}/${path}`;
await request(purgeUrl, { method: "PURGE" });

К сожалению, это не работает.Я вижу, что страница обновлена ​​в облачном хранилище, но при обновлении URL-адреса новая HTML-страница не отображается.Единственный способ показать новый HTML - это повторно развернуть код firebase (терминал - развертывание firebase).

Вот мой код (в файле node.js):

const ORIGIN = "examplesite-30ccf.firebaseapp.com/";

function getFacts(){
  return database.ref('/web app/test').once('value').then(snap =>snap.val());
}

exports.updateHomePage = functions.database.ref('/web app/test')
.onWrite((snap, context) => {

  return getFacts()
  .then(result1 => {
    console.log("result1", result1);
      return bucket
      .file('public_html/index.html')
      .save(HomePage(result1), {
        gzip: true,
        metadata: {
          contentType: "text/html; charset=utf-8",
          cacheControl: "max-age=300, s-maxage=31536000" // indef CDN cache since we purge manually
        }
      }); 
  }).then(doNotUse => {

    const purgeUrl = `${ORIGIN}`;
    console.log("purged URL", purgeUrl);
    return request(purgeUrl, { method: "PURGE" });
}).catch(error => {
      // Handle errors of asyncFunc1() and asyncFunc2()
  });

});`

В журналах Firebase Functions нет сбоев или исключений.Буду признателен за любую оказанную помощь.Спасибо

1 Ответ

0 голосов
/ 17 октября 2018

Я случайно нашел ответ, пытаясь решить другую проблему.

Вам нужно быть на платном плане Firebase, чтобы делать внешние вызовы API: https://firebase.google.com/pricing/

Так что метод PURGE делаетработать до тех пор, пока вы обновили свой план.Вот код, который позволяет вам очистить CDN (Node.js в Typescript):

import * as request from "request-promise";

const purgeUrl = `examplesite.com`;
await request(purgeUrl, { method: "PURGE" });
...