MYOB ODBC驱动程序使用Compojure将工作目录更改为temp

时间:2010-10-12 07:10:41

标签: clojure compojure myob

我写了一些内部网络应用程序,用于将发票从我的作业卡数据库导入MYOB。我用Clojure和Compojure编写了它,它实际上运行得很好,对我来说这也是一个很好的学习练习。

但是,我遇到了问题,似乎在成功导入发票后,jetty服务器将不再提供静态CSS文件。

defroute如下:

(defroutes static-routes
  (GET ["/:filename" :filename #".*"] [filename]
       (response/file-response filename {:root "public"})))

(该文件只是css / default.css,它在第一次导入之前就完美无缺。)​​

现在我觉得我发现了问题,似乎MYOB ODBC驱动程序正在更改Jetty服务器(和我的REPL)的工作目录,因为当我在REPL中输入以下内容时:

(file-seq (File. "."))

我得到了我的Temp文件目录列表,这可以解释为什么我的CSS文件不再被找到。

奇怪的是,如果我这样做:

(.getAbsolutePath (File. "."))

我得到了我的应用程序的正确目录。

有没有人知道可以解决MYOB ODBC驱动程序的这个问题的某些事情(除了在绝对路径中编码)?

我猜我可以在启动时抓住并存储绝对路径,但是这会与uberjar一起工作吗?

编辑: 由于JVM的限制,似乎无法修复?

How do I change directory in command line with Clojure?

1 个答案:

答案 0 :(得分:0)

对此,似乎没有太多可以做的事情。看来MYOB ODBC桥只是坏了。

所以为了解决这个问题,我已经用相对文件调用替换了.getAbsolutePath。

e.g。

(java.io.File. (.getAbsolutePath (java.io.File. "templates/index.html")))

我也改变了它,因此静态文件请求使用绝对文件路径:

(defroutes static-routes
  (GET ["/:filename" :filename #".*"] [filename]
       (response/file-response filename {:root (.getAbsolutePath (java.io.File. "public"))})))

我还没有尝试创建一个uberjar,所以我希望我可能会遇到一些问题。


只是更新一下,使用Compojure的资源功能似乎完全跳过了问题,在创建UberJar时也没有问题。

所以我不再定义“静态路由”,我只是使用:

 (route/resources "/")

将我的资源/公共目录中的文件放在项目的根目录中。