MYOB ODBC Driver меняет рабочий каталог на временный с использованием Compojure - PullRequest
0 голосов
/ 12 октября 2010

Я написал небольшое внутреннее веб-приложение, которое я использую для импорта счетов из нашей базы данных вакансий в MYOB.Я написал его с использованием Clojure и Compojure, и он на самом деле работает довольно хорошо, и это было также хорошим обучающим упражнением для меня.

Однако у меня возникла проблема, кажется, что после успешного выставления счетаИмпортировать Jetty сервер больше не будет обслуживать статический файл 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?

Как изменить каталог в командной строке с Clojure?

1 Ответ

0 голосов
/ 06 декабря 2010

Похоже, с этим мало что можно сделать.Просто кажется, что мост MYOB ODBC просто плох.

Итак, чтобы обойти это, я заменил мои относительные файловые вызовы на использование .getAbsolutePath.

например

(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 "/")

И файлы в моем каталоге resources / public в корневом каталоге моего проекта.

...