Tomcat Compojure静态资源在dev中工作,但在prod中不工作
我正在用Compojure 1.6.0构建一个web应用程序。对于第三方JS库,我使用npm安装它们,npm将它们放在名为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
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
一个。