gpt4 book ai didi

tomcat - Compojure 静态资源在开发中工作但在生产中不工作

转载 作者:行者123 更新时间:2023-11-28 23:15:05 27 4
gpt4 key购买 nike

我正在使用 Compojure 1.6.0 构建网络应用程序。对于第三方 JS 库,我使用 npm 安装它们,将它们放在一个名为 node_modules 的文件夹中(不可自定义)。为了服务他们,我这样做了:

(route/files "/node_modules" {:root "node_modules/"})

在开发中效果很好。对于生产,我部署了一个 uberwar,所以在创建 war 之前,我只是将这些文件复制到公共(public)资源中:

# deploy.sh
cp -r node_modules/ resources/public/node_modules/
lein ring uberwar

一切正常。

现在我想将我的 URI 路径更改为 /static/ 而不是 /node_modules/。我试着改变我的路由线路说:

(route/files "/static" {:root "node_modules/"})

然后更新所有指向这些 URI 的 HTML 引用。这在开发中按预期工作(lein ring server-headless),但在生产(部署的 warfile)中它失败了。为 /static/ 下的任何路径调用我的 route/not-found 处理程序。

什么给了?为什么URI路径和这个有关系,而且只在一个环境下?

最佳答案

我正在使用 wrap-defaults(对于任何重要的网页来说这似乎都是强制性的),并且它默认添加了 route/resources。那是开发中的空操作,但导致产品按名称查找 node_modules

确切地说,这不是问题,但它确实隐藏了实际问题。当我更改 route/files 调用时,它改变了 dev 的行为,但它并没有在 prod 中使用。

我不知道什么是正确的解决方案,但现在我在wrap-defaults中禁用:static,并且自己对 route/filesroute/resources 进行匹配调用,所以我可以完全控制它。

关于tomcat - Compojure 静态资源在开发中工作但在生产中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51140677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com