【问题标题】:Compojure static resources work in dev but not prodCompojure 静态资源在开发中有效,但在生产中无效
【发布时间】:2018-12-10 22:44:21
【问题描述】:

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

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

在开发中运行良好。对于生产,我部署了一个 uberwar,所以在创建战争之前,我只需将这些文件复制到公共资源中:

# 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)它失败了。我的 route/not-found 处理程序被 /static/ 下的任何路径调用。

什么给了?为什么 URI 路径与此有任何关系,而且只在一个环境中?

【问题讨论】:

  • 哦,我可能已经找到了一个解释:wrap-defaults 自动添加了一个route/resources,所以也许我的开发环境正在使用我的route/files,而产品环境正在使用自动的@987654333 @一。

标签: tomcat clojure war compojure


【解决方案1】:

我使用的是wrap-defaults(这对于任何重要的网页来说似乎都是强制性的),默认情况下它会添加route/resources。这在 dev 中是无操作的,但导致 prod 按名称查找 node_modules

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多