【问题标题】:Firebase hosting with cloud functions - how to purge/refresh CDN cache?具有云功能的 Firebase 托管 - 如何清除/刷新 CDN 缓存?
【发布时间】:2019-03-18 03:09:27
【问题描述】:

我正在按照该视频中的说明进行操作,到目前为止一切正常,直到我需要清除旧 HTML 的 CDN:

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

到目前为止,我已经使用 Firebase Cloud Functions 创建了一个静态 HTML 页面,它存储在 Firebase Cloud Storage 上。每当我的 Firebase 数据库中的数据更新时,都会呈现一个新的和更新的静态 HTML 页面并将其保存到 Cloud Storage。

Firebase 托管服务于该静态 HTML 页面,并存储在 CDN 上。 根据上面的视频,我为 CDN 设置了较长的刷新时间,因为我只希望它在我对 Firebase 数据库中的数据进行更改时更新(如果没有进行任何更改,则不刷新 CDN)

为此,当页面更新时,必须清除存储在 CDN 上的旧 HTML 页面并用新的 HTML 页面替换。

33:19 的视频提示了以下代码:

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

不幸的是,它似乎不起作用。我可以看到该页面已在 Cloud Storage 上更新,但是当我刷新 URL 时,未显示新的 HTML 页面。 我可以显示新 HTML 的唯一方法是再次重新部署 firebase 代码(终端 - firebase deploy)。

这是我的代码(在 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 函数日志中没有崩溃或异常。任何帮助深表感谢。谢谢

【问题讨论】:

    标签: firebase caching google-cloud-functions cdn firebase-hosting


    【解决方案1】:

    我在尝试解决另一个问题时无意中找到了答案。

    您需要使用付费 Firebase 计划才能进行外部 API 调用: https://firebase.google.com/pricing/

    因此,只要您升级了计划,PURGE 方法就可以工作。 这是允许您清除 CDN(Typescript 中的 Node.js)的代码:

    import * as request from "request-promise";
    
    const purgeUrl = `examplesite.com`;
    await request(purgeUrl, { method: "PURGE" });
    

    【讨论】:

    • 你能解释一下如何使用云功能吗?
    • 是的,它是 Ayyappa
    • 感谢您的回复。让我再试一次。我之前没能把它弄好。
    • 这还能用吗?你是从函数中执行这个吗?
    • 这是否需要任何身份验证?它是如何工作的?有文件吗?此外,它是否清除了所有 Vary 标头变体?如果设置 Vary: User-Agent 标头,则每个 Use-Agent 将获得一个缓存
    【解决方案2】:

    只需执行一个 curl 命令:

    curl -X PURGE https://yoursite.com/path

    【讨论】:

    • 这可以从功能代码用于生产吗?
    猜你喜欢
    • 2022-03-29
    • 2018-05-07
    • 2020-06-13
    • 2017-12-11
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多