首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYOB ODBC驱动程序使用Compojure将工作目录更改为temp

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

Stack Overflow用户
提问于 2010-10-12 15:10:41
回答 1查看 489关注 0票数 0

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

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

解冻过程如下:

代码语言:javascript
复制
(defroutes static-routes
  (GET ["/:filename" :filename #".*"] [filename]
       (response/file-response filename {:root "public"})))

(该文件只是css/default.css,在第一次导入之前它工作得很好。)

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

代码语言:javascript
复制
(file-seq (File. "."))

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

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

代码语言:javascript
复制
(.getAbsolutePath (File. "."))

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

有没有人知道可以绕过MYOB ODBC驱动程序这一怪癖的方法(除了在绝对路径中编码)?

我猜我可以在启动时抓取并存储绝对路径,但这对uberjar有效吗?

编辑:由于JVM中的限制,似乎不可能修复?

How do I change directory in command line with Clojure?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-06 11:19:31

对于这一点,似乎真的没有太多可以做的。看起来MYOB ODBC桥很糟糕。

因此,为了解决这个问题,我将我的相对文件调用替换为使用.getAbsolutePath。

例如:

代码语言:javascript
复制
(java.io.File. (.getAbsolutePath (java.io.File. "templates/index.html")))

我还更改了它,以便静态文件请求使用绝对文件路径:

代码语言:javascript
复制
(defroutes static-routes
  (GET ["/:filename" :filename #".*"] [filename]
       (response/file-response filename {:root (.getAbsolutePath (java.io.File. "public"))})))

我还没有尝试创建一个uberjar,所以我想我可能会在那里遇到一些问题。

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

所以我不再定义"static-routes“,我只需要使用:

代码语言:javascript
复制
 (route/resources "/")

并将这些文件放在项目根目录下的resources/public目录中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3912349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档