Как запустить / отладить compojure web-приложение с помощью против часовой стрелки (или la clojure)

Я пытаюсь написать свое первое веб-приложение на compojure. Я использую CCW, и я File-New-Project, Clojure Project и используйте шаблон "compojure" leiningen. В конечном итоге Project.clj выглядит как

(defproject asdf "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [compojure "1.1.5"]]
  :plugins [[lein-ring "0.8.2"]]
  :ring {:handler asdf.handler/app}
  :profiles
  {:dev {:dependencies [[ring-mock "0.1.3"]]}})

src/asdf/handler.clj выглядит так

(ns asdf.handler
  (:use compojure.core)
  (:require [compojure.handler :as handler]
            [compojure.route :as route]))

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

(def app
  (handler/site app-routes))

Я нашел, что могу запустить это, используя lein ring server из командной строки, но я не уверен, как запустить это из затмения. Я, конечно, надеюсь, что смогу не только запустить его, но и отладить, установить точки останова и тому подобное. Есть ли способ сделать это в затмении? Или, если нет, как насчет IntelliJ/La-Clojure? (Сейчас я немного боюсь emacs, но, может быть, если он будет очень простым, я попробую).

Или это просто не типичный процесс разработки приложения для compojure? (Если нет, то что? Просто беги lein ring server и молиться?)

Если это имеет значение, то это на Win7.

2 ответа

Решение

Вот рецепт, который отлично подходит для меня при разработке приложений Ring:

  • Убедитесь, что вы правильно настроили поддержку leiningen для вашего проекта (сделайте это один раз, если сомневаетесь):
    • в проводнике пакетов выберите проект и вызовите контекстную команду Leiningen > Reset configuration
    • затем также вызвать Leiningen > Update dependencies команда
    • вы должны увидеть Leiningen Dependencies виртуальный узел в вашем проекте, ссылаясь на прямые и транзитивные зависимости вашего проекта
  • Выберите asdf.handler файл, щелкните правой кнопкой мыши, а затем Debug as > Clojure Application
  • Открой asdf.handler пространство имен в редакторе
  • Когда курсор находится в редакторе, введите Ctrl+Alt+N перейти к REPL и переключить текущее пространство имен REPL на asdf.handler в то же время
  • Запустите приложение, набрав (app) + Enter (или же Ctrl+Enter если ваш курсор находится не в конце строки)

Теперь вы можете перемещаться между редакторами и REPL.

  • Чтобы отправить содержимое редактора в REPL, выберите его и нажмите Ctrl+Enter
  • Если вы нажмете Ctrl+Enter без выбора все "выражение верхнего уровня" (например, defn) будет отправлено в REPL
  • Чтобы отправить файл целиком в REPL, введите Ctrl+Alt+S
  • весь список сочетаний клавиш, относящихся к CCW, находится здесь: http://code.google.com/p/counterclockwise/wiki/EditorKeyBindingsFeatures

Обратите внимание, что будущая версия Counterclockwise будет немного больше интегрироваться с Leiningen 2, но в нынешнем виде сама природа разработки ring приложения заставляют загружать вещи не так больно, как описано выше, ИМХО

Вы можете запускать приложения Compojure/Ring на IntelliJ IDEA и La Clojure, выполнив следующие действия:

  1. генерировать pom.xml от Лейнингена project.clj с помощью lein pom команда.
  2. Импортируйте maven проект с IntelliJ IDEA как обычно. Возможно, вы захотите убедиться, что у вас есть банка Clojure в classpath.
  3. Как только проект загружен, вы можете запустить Clojure REPL с помощью Tools -> Start Clojure Console.
  4. Чтобы загрузить файл Clojure в REPL, выберите Сервис -> Clojure REPL -> Загрузить файл в REPL.

После этого, чтобы запустить приложение Ring, вы можете просто загрузить файл Clojure, который вызывает ring.adapter.jetty/run-jetty,

Код для запуска простого маршрута http://localhost:4004/ будет выглядеть так:

(require 'compojure.core)
(require 'ring.adapter.jetty)

(ring.adapter.jetty/run-jetty
  (compojure.core/routes (compojure.core/ANY "/" [] "Hello world!"))
  {:port 4004 :join? false})

:join? Опция важна, если для нее задано значение true (по умолчанию), REPL не будет принимать больше команд. Ваши маршруты обычно будут более сложными и compojure.core/defroutes или другие средства должны быть использованы.

Вы можете поместить такой файл в test путь, поэтому он не будет загружен при запуске проекта за пределами IDEA. Если фасет Clojure не добавлен в ваш модуль, вы можете добавить его в Файл -> Структура проекта -> Модули.

Полный образец (с перезапуском молнии) доступен здесь: https://github.com/tlipski/ganelon-demo - разработка выполняется с помощью IDEA, а реальный сайт работает на Heroku: http://ganelon.herokuapp.com/.

Отладка приложений Clojure, запущенных с помощью описанной выше техники, также возможна - вам просто нужно:

  1. Создать удаленную отладку Запустить профиль в IntelliJ IDEA
  2. Добавьте соответствующие параметры JVM из профиля выше (например, agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005) для REPL настроек в Файл -> Структура проекта -> Модули -> [ваш модуль] -> Фаска Clojure -> Аргументы JVM.
  3. Запустите REPL с помощью Tools -> Запустите Clojure Console.
  4. Запустите профиль удаленной отладки.

После этого вы можете добавлять точки останова, проверять переменные и т. Д.

Другие вопросы по тегам