Tomcat Compojure静态资源在dev中工作,但在prod中不工作

Tomcat Compojure静态资源在dev中工作,但在prod中不工作,tomcat,clojure,war,compojure,Tomcat,Clojure,War,Compojure,我正在用Compojure 1.6.0构建一个web应用程序。对于第三方JS库,我使用npm安装它们,npm将它们放在名为node\u modules的文件夹中(不可自定义)。为了招待他们,我做了以下工作: (route/files "/node_modules" {:root "node_modules/"}) 这在开发中效果很好。对于生产,我部署了uberwar,因此在创建war之前,我只需将这些文件复制到公共资源中: # deploy.sh cp -r node_modules/ res

我正在用Compojure 1.6.0构建一个web应用程序。对于第三方JS库,我使用npm安装它们,npm将它们放在名为
node\u modules
的文件夹中(不可自定义)。为了招待他们,我做了以下工作:

(route/files "/node_modules" {:root "node_modules/"})
这在开发中效果很好。对于生产,我部署了uberwar,因此在创建war之前,我只需将这些文件复制到公共资源中:

# deploy.sh
cp -r node_modules/ resources/public/node_modules/
lein ring uberwar
这一切都很好

现在我想将URI路径改为
/static/
,而不是
/node\u modules/
。我试着改变路线,说:

(route/files "/static" {:root "node_modules/"})
然后更新所有指向这些URI的HTML引用。这在开发中可以正常工作(
lein-ring-server-headless
),但在生产(部署的warfile)中失败。对于
/static/
下的任何路径,都会调用我的
路由/未找到
处理程序


有什么好处?为什么URI路径与此有关,而且只在一个环境中?

我使用的是
包装默认值
(对于任何非平凡的网页来说,这似乎都是强制性的),默认情况下它会添加
路由/资源。这在dev中是没有操作的,但导致prod按名称查找
node\u模块

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


我不知道正确的解决方案是什么,但现在我在
包装默认值中禁用
:static
,并对
路由/文件
路由/资源
我自己进行匹配调用,所以我完全可以控制它。

哦,我可能已经找到了一个解释:
wrap defaults
自动添加了一个
route/resources
,因此可能我的dev env正在拾取我的
route/files
,而prod env正在使用自动
route/resources
一个。