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

在Google Kubernetes引擎上托管sails.js应用程序时,我收到了所有资产的404,kubernetes,sails.js,gitlab-ci,google-kubernetes-engine,kubernetes-ingress,Kubernetes,Sails.js,Gitlab Ci,Google Kubernetes Engine,Kubernetes Ingress,我想在Google Kubernetes引擎上运行一个sails.js应用程序。在本地运行应用程序docker容器非常有效。 GKE的部署是通过gitlab Auto Devops管道完成的。到目前为止,将应用程序部署到GKE是可行的,我可以使用gitlab CI生成的域访问sails.js应用程序的页面-例如xyz-review-autodevops-123.my.host.com 但是,当访问页面时,只能加载请求的页面——图像、javascript和css文件等所有资产都不会加载,而是返回4

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

但是,当访问页面时,只能加载请求的页面——图像、javascript和css文件等所有资产都不会加载,而是返回404

当查看GKE中的nginx入口控制器日志时,我看到这些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"  
我的猜测是,ingress不知道资产的请求主机,因为它们被请求为绝对路径(
/js/cloud.setup.js
)而不是相对路径(
js/cloud.setup.js
),因此不知道将此请求路由到何处,因为域信息在请求中丢失


但我现在知道如何解决404问题。将sails.js中的所有路径更改为相对路径会解决这个问题吗?我甚至不知道这是否容易做到,因为相当多的任务是由sails.js中的grunt任务生成的,并且是以绝对形式生成的。

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

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

由于grunt用于操纵和提供sails.js中的资产,这些资产还没有生成


解决方案是将
grunt
sails hook grunt
移动到
包中的
依赖项。
这是一个愚蠢的错误,因为sails以某种方式被配置为包含
grunt
sails hook grunt
仅作为
package.json
中的devdependency

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

由于grunt用于操纵和提供sails.js中的资产,这些资产还没有生成


解决方案是将
grunt
sails-hook-grunt
移动到
包中的
依赖项!这真的救了你!这真的救了我