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



我想在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在某种程度上被配置为只将gruntsails-hook-grunt作为开发依赖项包含在package.json中。

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

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

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

相关内容

  • 没有找到相关文章

最新更新