将静态网站部署到Gatsby打造的Google Cloud

2022-03-30 00:00:00 reactjs static gcloud javascript gatsby

我一直在尝试在Google Cloud平台上部署我用Gatsby制作的静态应用。

我的问题是app.yaml文件。

  • 以下是我到目前为止所做的工作:

    1. 创建了Gatsby项目。

    2. Gatsby版本。

    3. 已将公用文件夹上载到GCS存储桶。

    4. 使用以下命令将其复制到Google Cloud Shell:gsutil rsync-r gs://静态站点-测试。/Gatsby-test

    5. CD Gatsby-test

    6. 已创建app.yaml文件:

    7. gCloud应用部署

runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /
  static_files: public/
  upload: public/index.html
- url: /
  static_dir: public/static
  • 应用程序的第一页加载正常,但指向其他页的任何链接都不起作用。
  • 我想我的问题出在app.yaml上,我不知道如何正确填写它。

  • 这是我的公用文件夹:

我有多个页面。

Page-2和About文件夹都包含一个index.html文件。

有什么想法吗?

我尝试了以下方法:

runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /
  static_files: public/index.html
  upload: public/index.html
- url: /page-2
  static_dir: public/page-2/index.html

runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /
  static_files: public/index.html
  upload: public/index.html
- url: /page-2
  upload: public/page-2/index.html

尽管我希望此方法不正确,因为如果我有多个页面,这可能会变得很麻烦。

这是我的索引页:

import React from "react"
import { Link } from "gatsby"

import Layout from "../components/layout"
import Image from "../components/image"
import SEO from "../components/seo"

const IndexPage = () => (
  <Layout>
    <SEO title="Home" />
    <h1>Hi people</h1>
    <p>Welcome to your new Gatsby site.</p>
    <p>Now go build something great.</p>
    <div style={{ maxWidth: `300px`, marginBottom: `1.45rem` }}>
      <Image />
    </div>
    <Link to="/page-2/">Go to page 2</Link>

    <Link to="about">Go to about</Link>
    <p>paragrap h</p>
    <div style={{ color: `purple` }}>
      <h1>Hello Gatsby!</h1>
      <p>What a word</p>
      <img src="https://source.unsplash.com/random/400x200" alt="" />
    </div>
  </Layout>
)

export default IndexPage

我的结果是我只能访问index.html页面,但在单击链接时,我收到了"Page Not Found Error"(找不到页面错误)。

编辑:

我更改了app.yaml,但现在我的图像出现问题

runtime: python27
api_version: 1
threadsafe: true

handlers:

#site root
- url: /
  static_files: public/index.html
  upload: public/index.html

# page-2
- url: /page-2/
  static_files: public/page-2/index.html
  upload: public/page-2/index.html

# Page not found
- url: /.*
  static_files: public/404/index.html
  upload: public/404/index.html

  # image files
- url: /(.*.(bmp|gif|ico|jpeg|jpg|png))
  static_files: public/1
  upload: public/(.*.(bmp|gif|ico|jpeg|jpg|png))

层次结构如下:

PUBLICSTATIC

├───6d91c86c0fde632ba4cd01062fd9ccfa

│├───59139

│├───af144

│├───b5207

│├───d3809

│├───e22c9

│└───fdb0

└───%d

在这些随机文件夹中是图像。

我还使我的图像直接显示在公用/文件夹中,但仍然不起作用。

以下是我使用图像的方式:

import React from "react"
import { Link } from "gatsby"

import Layout from "../components/layout"
import Image from "../components/image"
import SEO from "../components/seo"
import logo from "../images/gatsby-icon.png"
import logo2 from "../../static/secondicon.png"

const IndexPage = () => (
  <Layout>
    <SEO title="Home" />
    <h1>Hi people</h1>
    <p>Welcome to your new Gatsby site.</p>
    <p>Now go build something great.</p>
    <div style={{ maxWidth: `300px`, marginBottom: `1.45rem` }}>
      <Image />
    </div>
    <Link to="/page-2/">Go to page 2</Link>

    <Link to="about">Go to about</Link>
    <p>paragrap h</p>
    <div style={{ color: `purple` }}>
      <h1>Hello Gatsby!</h1>
      <p>What a word</p>
      <img src={logo} alt="" />
      <p>Second icon:</p>
      <img src={logo2} alt="" />
    </div>
  </Layout>
)

export default IndexPage

以下是部署:https://static-site-test-256614.appspot.com/

我只是试图以错误的方式进行部署吗?我是否应该为此使用其他工具?


解决方案

以下app.yaml文件应该可以与Gatsby QuickStart一起正常工作example:

runtime: python27
api_version: '1'
threadsafe: true

handlers:

  - url: /
    static_files: public/index.html
    upload: public/index.html

  - url: /((.*/)*[^/]+.[^/]+)$
    static_files: public/1
    upload: public/.*

  - url: /(.*)$
    static_files: public/1/index.html
    upload: public/.*/index.html

您可以参考以下post了解更多服务静态网站时的app.yaml配置示例,以及以下针对所有app.yaml元素的documentation配置示例。

相关文章