【问题标题】:gcloud functions deploy not uploading html and cssgcloud 功能部署不上传 html 和 css
【发布时间】:2021-01-24 12:05:35
【问题描述】:

我创建了以下 express API

const express = require("express");
const app = express();
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
require("dotenv/config");
//routes
const authRoute = require("./routes/auth.js");
const adminRoute = require("./routes/admin.js");
//middleweres
//converting body into json using body parser
app.use(cookieParser());
app.use(bodyParser.json());
app.use("/", express.static("public"));
app.use("/api/auth", authRoute);
app.use("/api/admin", adminRoute);

// starting express server
// app.listen(5000, () => {
//   console.log("listning on port 5000");
// });

module.exports = {
  app,
};

在公共文件夹中,我在公共/静态文件夹中有 html 文件和 css 和 js 公共文件夹中的 html、css 和 js 是通过 react build 生成的。 我正在尝试使用以下命令在谷歌云功能中部署此 API

gcloud functions deploy outreach-dashboard --entry-point app --runtime nodejs10 --trigger-http --allow-unauthenticated

函数正在部署,但问题是当我在 gcp 仪表板上看到函数时,它的源代码不包含公用文件夹,如果我以 zip 格式下载源代码,那么我可以在那里看到公用文件夹,但它是空的。 我需要公用文件夹才能部署,以便使用

express.static("public")

【问题讨论】:

  • 无静态路由有效吗?
  • 不,他们没有我还发现通过从我的 .gitignore 文件中删除 /public 他们开始在 GCF 中弹出。但 GCF 仍然没有提供静态 html、css 并给我 403 错误,但我认为这是完全不同的问题
  • 那么现在,您有 403 而不是 404?正确的?你还在使用 --allow-unauthenticated 参数吗?
  • 是的,我仍在使用 --allow-unauthenticated 我觉得我应该在其他地方托管静态文件,并且只使用云功能来托管 API
  • 如果我理解正确,您已将新文件部署到public 文件夹,但未部署。我在新的helloworld 部署上尝试了这个,它工作正常。我可以在每次部署时添加和删除文件和目录,您的帐户一定有问题...我认为您应该寻求支持或尝试新项目

标签: node.js google-cloud-platform google-cloud-functions


【解决方案1】:

您正尝试在同一个 Cloud Functions 中提供多个端点。我看到了一些关于 Stack Overflow 的 hack,人们通过弯曲框架来实现这一点。这不是我的建议。

Cloud Run 是一个非常相似的平台。相同的底层基础设施,并且功能非常接近(我wrote an article on this)。但是你提供一个容器化的网络服务器,更适合你的用例。

您可以轻松尝试一下。

  • 取消注释您的“启动 app express”部分
  • 本地测试是否有效。

然后运行这个命令

gcloud beta run deploy outreach-dashboard --source=. --platform=managed --region=us-central1 --allow-unauthenticated

根据需要更改区域

命令:

  • 上传源代码(注意您的.gitignore.gcloudignore 文件,确保上传所有文件)
  • 使用您的源创建一个容器。为此,使用了Buildpacks.io。与 Cloud Functions 和 App Engine 的流程完全相同。
  • 在 Cloud Run 上部署容器。

如果问题仍然存在,则自动容器构建过程可能存在问题(可能某些文件被自动丢弃)。在这种情况下,您可以编写一个非常简单的Dockerfile,类似于您在getting started documentation 中的这个。

这一次,您可以通过 2 个步骤(和 2 个命令)创建和部署

# create the container with Cloud Build based on the docker file
gcloud builds submit --tag gcr.io/<PROJECT_ID>/<containerName>

# Deploy on Cloud Run
gcloud beta run deploy outreach-dashboard --image=gcr.io/<PROJECT_ID>/<containerName> --platform=managed --region=us-central1 --allow-unauthenticated

【讨论】:

    【解决方案2】:

    事实证明,我已从 .gitignore 中删除公用文件夹 之后还需要通过在根文件夹中创建app.yaml 文件来告诉 GCF 将公用文件夹视为静态文件夹

    app.yaml 的内容

    runtime: nodejs12
    
    handlers:
      - url: /static
        static_dir: public
    
      - url: /.*
        script: auto
    

    【讨论】:

      猜你喜欢
      • 2021-01-20
      • 1970-01-01
      • 2019-03-14
      • 2018-08-20
      • 2016-04-06
      • 2023-04-03
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      相关资源
      最近更新 更多