我编写了一个小的内部 web 应用程序,用于将发票从我们的工作卡数据库导入到 MYOB。我使用 Clojure 和 Compojure 编写了它,它实际上工作得很好,这对我来说也是一个很好的学习练习。
但是,我遇到了一个问题,似乎在成功导入发票后,码头服务器将不再提供静态 CSS 文件。
默认路由如下:
(defroutes static-routes
(GET ["/:filename" :filename #".*"] [filename]
(response/file-response filename {:root "public"})))
(该文件只是 css/default.css,它在第一次导入之前完美运行。)
现在我想我找到了问题所在,似乎 MYOB ODBC 驱动程序正在更改 Jetty 服务器(和我的 REPL)的工作目录,因为当我在 REPL 中输入以下内容时:
(file-seq (File. "."))
我得到了我的临时文件目录的列表,这可以解释为什么我的 CSS 文件不再被找到。
奇怪的是,如果我这样做:
(.getAbsolutePath (File. "."))
我得到了我的应用程序的正确目录。
有没有人知道可以绕过 MYOB ODBC 驱动程序的这个怪癖的东西(除了在绝对路径中编码)?
我猜我可以在启动时抓取并存储绝对路径,但这适用于 uberjar 吗?
编辑:由于 JVM 的限制,似乎无法修复?