部署在Netlify上的Gatsby站点未从graphcms更新数据

时间:2020-08-24 16:19:09

标签: graphql gatsby netlify

我是使用Gatsby和graphcms的初学者。使用gatsby开发环境从cms提取数据很好,一切都很好。当我通过cms内容添加一些新内容时,我的网站已部署在Netlify上,而这些内容没有更新,也没有获取。

需要cms内容的组件:

import React from "react"
import { StaticQuery, graphql } from "gatsby"

import ServicesMobileProduct from "./ServicesMobileProduct"

const ProductsMobile = () => (
  <StaticQuery
    query={graphql`
      {
        product {
          products {
            id
            productName
            description
            price
            amount
          }
        }
      }
    `}
    render={({ product: { products } }) => (
      <>
        {products.map(({ productName, description, price, amount, id }) => (
          <ServicesMobileProduct
            key={id}
            productName={productName}
            description={description}
            price={price}
            amount={amount}
          />
        ))}
      </>
    )}
  />
)

export default ProductsMobile

1 个答案:

答案 0 :(得分:1)

Gatsby是静态站点生成器,这意味着在构建/开发期间,它会收集CMS,markdown,JSON或其他数据源中的所有数据,并在/public文件夹中创建公共HTML输出。大致遵循以下简化模式:

enter image description here

通常,网站建成后,您需要重新部署它以更新,创建或删除内容,因为网站没有使用这些CMS新更改进行更新。

您要实现的目标称为webhook。 Webhook是一种应用程序在新事件实时发生时通知另一应用程序的方法,例如从源中创建,删除或修改内容。

在盖茨比,某些资源(如DatoCMS)公开了一个Webhook,但这仅在开发模式下有效。 CMS的任何更改都会触发gatsby develop命令来刷新内容。当然,极不建议仅以自动刷新的方式{@ {1}}上载网站。

在构建模式下,此想法非常相似,但是您需要触发gatsby develop +部署,而不是运行gatsby develop命令。如果使用的是Netlify等任何连续部署工具(CD),则可以轻松实现。如果使用的是詹金斯(Jenkins)等持续集成(CI)工具,则需要配置管道来实现它。

实现所需目标的另一种方法是创建对外部API或数据源的异步JavaScript请求,该请求将内容填充到应用程序中。这将在任何环境下都有效,但是您将失去Gatsby带来的所有SEO潜力(和其他潜力)。