在 Google Kubernetes Engine 上托管 sails.js 应用程序时,我收到所有资产的 404

I am receiving 404 for all assets when hosting sails.js application on Google Kubernetes Engine

我想在 Google Kubernetes Engine 上 运行 一个 sails.js 应用程序。 运行 应用程序 docker 容器在本地完美运行。 部署到 GKE 是通过 gitlab Auto-Devops 管道完成的。到目前为止,将应用程序部署到 GKE 是可行的,我可以使用 gitlab-CI 生成的域访问 sails.js 应用程序的页面 - 例如xyz-review-autodevops-123.my.host.com

但是在访问页面时,只能加载请求的页面 - 图像、javascript 和 css 文件等所有资产都不会加载,但 return 404。

当查看 GKE 中的 nginx-ingress-controller 日志时,我看到请求了这些 url 但结果是 404:

[05/Aug/2018:12:27:25 +0000] "GET /js/cloud.setup.js HTTP/1.1" 404 9 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36" 573 0.004 [my-app-review-autodevops-1232u0-my-app-443] xx.xx.xx.xx:80 9 0.004 404

还经常记录如下错误。我不确定这是否与此问题有关,但仍想提及它以防万一:

error obtaining PEM from secret my-app-1239989/review-autodevops-1232u0-my-app-tls: error retrieving secret my-app-1239989/review-autodevops-1232u0-my-app-tls: secret my-app-1239989/review-autodevops-1232u0-my-app-tls was not found"  

我的猜测是入口不知道资产的请求主机,因为它们是作为绝对路径 (/js/cloud.setup.js) 而不是相对路径 (js/cloud.setup.js) 请求的,因此不知道在哪里将此请求路由至,因为域信息在请求中丢失。

但我现在知道如何解决这个 404 问题。将 sails.js 中的所有路径更改为相对路径会修复它吗?我什至不知道这是否可以轻松完成,因为相当一部分是由 sails.js 中的 g运行t 任务生成的,并且是以绝对形式生成的。

好的,自己发现错误。 这是一个愚蠢的错误,因为 sails 以某种方式配置为包含 gruntsails-hook-grunt 仅作为 package.json.

中的 devdependencies

由于在生产容器上,NODE_ENV 设置为环境变量,npm install 仅安装生产依赖项。

并且由于 grunt 用于操纵和提供 sails.js 中的资产,因此尚未生成这些资产。

解决方案是将 gruntsails-hook-grunt 移动到 package.json 中的 dependencies