Как запустить / отладить 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, выполнив следующие действия:
- генерировать
pom.xml
от Лейнингенаproject.clj
с помощьюlein pom
команда. - Импортируйте maven проект с IntelliJ IDEA как обычно. Возможно, вы захотите убедиться, что у вас есть банка Clojure в classpath.
- Как только проект загружен, вы можете запустить Clojure REPL с помощью Tools -> Start Clojure Console.
- Чтобы загрузить файл 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, запущенных с помощью описанной выше техники, также возможна - вам просто нужно:
- Создать удаленную отладку Запустить профиль в IntelliJ IDEA
- Добавьте соответствующие параметры JVM из профиля выше (например,
agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
) для REPL настроек в Файл -> Структура проекта -> Модули -> [ваш модуль] -> Фаска Clojure -> Аргументы JVM. - Запустите REPL с помощью Tools -> Запустите Clojure Console.
- Запустите профиль удаленной отладки.
После этого вы можете добавлять точки останова, проверять переменные и т. Д.