0

Выводится ошибка по строке, которой даже нет. В проекте, сделанном по видео с Joker 2014.

По отдельности все функции компилируются без сообщений об ошибках. Но при запуске run-server из кода, на localhost:8080 ничего не выводится и выдаётся ошибка в REPL:

CompilerException java.lang.RuntimeException:
   No such namespace: ohs, compiling:(NO_SOURCE_PATH:33:3) 

(ns joker.handler
  (:require [compojure.core :refer :all]
            [compojure.handler :as handler]
            [org.httpkit.server :as ohs]
            [compojure.route :as route]
            [ring.middleware.defaults :refer [wrap-defaults site-defaults]]))

(defn index [req]
  {:body (str req)
   :status 200})

(def stop
  (ohs/run-server #'app {:port 8080})
  )

(comment
  ;; magic lib
  (require '[vinyasa.pull :as vp])
  (vp/pull 'http-kit)
  )


(defroutes app-routes
  (GET "/" [] "Hello World")
  (route/resources "/")
  (route/not-found "Not Found"))

(def app
  (handler/site app-routes))
titov_andrei
  • 1,342
  • "при запуске run-server" каким образом? Из REPL? –  Jun 15 '16 at 12:54
  • @Кнопкатык - запускаю функцию из кода, но получается она копируется и выполняется в REPL – titov_andrei Jun 15 '16 at 15:07
  • Ну, т. е. вы как-то обозначаете конкретную пару скобок (я так понимаю, которая внутри stop) и отправляете её в REPL, так? А попробуйте перед этим сделать то же самое с ns-формой наверху. –  Jun 15 '16 at 15:13
  • @Кнопкатык - запускал все функции по очереди и по порядку, начиная с пространства имён – titov_andrei Jun 15 '16 at 15:24
  • Не надо действовать наугад. Если бы вы выполнили ns-форму, пространство имён ohs бы было. –  Jun 15 '16 at 15:29
  • @Кнопкатык - REPL и не ругается на ohs пока не доходит до некой несуществующей последней строки ... Пробелы и пустые строки в конце кода все удалил ... – titov_andrei Jun 15 '16 at 15:31
  • При запуске в REPL происходит копирование кода из редактора в REPL. Информация о том, откуда этот код, не сохраняется. Используется порядковая нумерация строк в сессии REPL'а. –  Jun 15 '16 at 15:33
  • Вы там как, разобрались? Я могу написать в ответе, почему Clojure ругается на отсутствие ohs, но у меня подозрение, что у вас в другом проблема. –  Jun 16 '16 at 13:49
  • @Кнопкатык - пока не разобрался – titov_andrei Jun 17 '16 at 08:38
  • Приведите пошагово, как воспроизвести проблему. –  Jun 17 '16 at 08:40
  • Было бы проще, если бы вы выложили весь проект на github, где его можно было бы посмотреть целиком на наличие ошибок. Вероятно вы просто выполняете форму (в REPL же?) находясь в другом ns. проверьте что значение переменной *ns* установлено в "joker.handler" и так же проверьте что joker.handler прописан в joker.core или что там у вас идет в качестве :main в project.clj – Seryh Jun 17 '16 at 12:58
  • @Seryh - https://github.com/titov-andrei/joker – titov_andrei Jun 18 '16 at 05:57
  • @Кнопкатык - https://www.youtube.com/watch?v=m_nlBeNIhZo - делал по этому видео – titov_andrei Jun 18 '16 at 05:59

1 Answers1

2

Надо понимать, что это живое демо, и код находится в промежуточном состоянии. В таком его обычно не коммитят, поскольку "как есть" он просто не запустится.

Загадка в макросе comment. Код внутри него не выполняется.

(defmacro comment
  "Ignores body, yields nil"
  {:added "1.0"}
  [& body])

А код специально завёрнут внутрь него, чтобы отдельные формы изнутри можно было выполнить явно, но выполнение формы целиком (eval file, например) их не выполняло.

Всё происходящее вызвано отсутствием библиотеки http-kit. И её действительно нет в вашем project.clj, поэтому и при старте REPL она отсутствует. Внутри comment размещены формы, которые затягивают эту библиотеку в текущую сессию. Саму форму comment выполнять бесполезно, она ничего не сделает (она разворачивается в nil). Надо выполнять формы внутри неё, по порядку, сверху вниз.

По-хорошему, надо в project.clj добавить http-kit. И выкинуть comment из кода вообще, оставив только в "файле-песочнице" для REPL.

  • "Всё происходящее вызвано отсутствием библиотеки http-kit" - так там же её "на лету цепляют" по видео, да и файл я не целиком запускаю, а как в видео, каждую функцию по порядку по ходу видео, и дошёл я только до 16 минуты - так почему по видео запускается веб-сервер, а у меня по тому же коду нет? – titov_andrei Jun 19 '16 at 17:51
  • @titov_andrei в вопросе порядок действий не изложен. Но ошибка говорит именно об этом. –  Jun 19 '16 at 17:56
  • буду копать, спасибо за направление – titov_andrei Jun 19 '16 at 18:05
  • @titov_andrei ну как? Разобрались, в чём беда? –  Jun 28 '16 at 16:07
  • понял, что матчасть ещё учить и учить... – titov_andrei Jun 29 '16 at 13:50