Clojure slurp Соединение отказано - PullRequest
0 голосов
/ 30 апреля 2020

Я создал проект, используя Luminus, с помощью следующей команды:

lein new luminus myapp +mysql +kee-frame +swagger +oauth +kibit

В этом проекте я создал вызов API, который вызывает функцию для чтения файла с диска. Вызов API (частично):

{:get {:summary "Returns a file from disk to show in GUI"
       :responses {200 {:body ::val/my-file}}
       :handler (constantly
                  {:status 200
                   :body (gui/get-file)})}}

Функция get-file находится в пространстве имен myapp.db. gui и имеет вид:

(defn get-file
  []
  (log/info "Trying to retrieve file")
  (read-string (slurp "file.edn")))

Когда я запустите REPL и введите команду (mount/start) приложение запускается нормально, и я могу сделать вызов API, чтобы увидеть содержимое файла. Расположение файла теперь в root моего проекта. Однако, если я помещаю файл в resources / myapp и изменяю команду slurp на (slurp "myapp/file.edn") или (slurp "resources/myapp/file.edn"), я получаю ошибку после запуска (mount/start), и приложение не запускается. Я получаю ту же ошибку, если пытаюсь прочитать файл с абсолютным путем, например (slurp "C:\\Development\\file.edn")

2020-04-30 12:02:03,512 [nREPL-session-88d31cf8-b119-4a87-901d-3eee1eb61cc7] INFO  myapp.env --=[myapp started successfully using the development profile]=-
2020-04-30 12:02:03,607 [nREPL-session-88d31cf8-b119-4a87-901d-3eee1eb61cc7] INFO  myapp.db.gui-related - Trying to retrieve file    
Execution error (ConnectException) at java.net.DualStackPlainSocketImpl/connect0 (DualStackPlainSocketImpl.java:-2).
    Connection refused: connect

. В этом проекте у меня будет много файлов 'config' для чтения, и я хотел бы быть в состоянии поместить их в одну или несколько подпапок в root моего проекта. Помимо этого будет еще один файл для чтения, который будет находиться вне структуры папок моего приложения.

Как я могу прочитать эти файлы?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Извините. Ошибка не имеет ничего общего с функцией slurp. В другой функции у меня все еще был URL-адрес для вызова API, и это изменилось. Поэтому я получил это

Execution error (ConnectException) at java.net.DualStackPlainSocketImpl/connect0 (DualStackPlainSocketImpl.java:-2).
Connection refused: connect

Это не имело ничего общего с чтением файла, но с попыткой достичь локального: 5001 вместо локального: 5000. Спасибо за вашу поддержку

0 голосов
/ 30 апреля 2020

С java вы всегда должны использовать косую черту; это (slurp "C:/Development/file.edn"), я думаю (у меня нет windows).

Также должно работать чтение с относительного пути; Вы можете проверить текущий рабочий каталог для вашего REPL с помощью (System/getProperty "user.dir") и убедиться, что путь правильный.

...