Как интегрировать веб-приложения Clojure в Apache
Примечание
учитывая, что эта операция была написана около двух лет назад, вместо того, чтобы снова задавать один и тот же вопрос, мне интересно, существуют ли пошаговые инструкции, чтобы я мог интегрировать Noir или другое веб-приложение Clojure в Apache, будь то Jetty, Tomcat или что-то еще. Подобные инструкции существуют для Django, и я думаю, что понимаю, что Python запускается в случае Django как двигатель, а не Кольцевой фреймворк, поэтому все больше сложнее с Clojure web-приложений.
На
Я глубоко влюблен в Clojure, и Compojure кажется аккуратным веб-фреймворком.
но все это развалилось, когда я хотел развернуть свое приложение на обычном сервере приложений, таком как Tomcat, как война. На самом деле мне пришлось написать пользовательские обработчики колец для статических файлов и ресурсов, которые будут работать как на локальном причале, так и на Tomcat, потому что обработчики запасов этого не сделали, и мне пришлось добавьте корень контекста везде вручную.
Я отрицательно поражен тем, что мне пришлось написать весь этот код, чтобы создать самое простое веб-приложение, которое могло бы работать как на Jetty, так и на Tomcat. У меня есть только три возможных объяснения этому:
- никто не использует Clojure / Compojure для чего-либо, кроме локального развития с причалом, т. е. в производстве
- все развертывают приложения Clojure / Compojure на выделенном причале без корневого контекста (Как люди делают это с узлом.js apps)
- есть очень простой способ обойти проблемы, с которыми я столкнулся, я не знал об этом
какой из них по вашему мнению дело? Или что-то другое?
Edit:
обратите внимание, что создание файла war-это не проблема с Maven/Leiningen, а не то, что я имею в виду. Мне интересно, что мне нужно написать так много кода, чтобы Compojure работал с Tomcat, основные вещи, такие как static обслуживание файлов и контекст корневой осведомленности, что должны работа из коробки.
7 ответов:
люди развертывают приложения Compojure в контейнеры сервлетов без пристани.
Проверьте:
также проверьте lein-war
я использую комбинацию из следующего, чтобы сделать это довольно безболезненно:
торт (ВКЛ. команды deploy)
шаблон торт для веб-проектов, разработанных Лау Дженсен.
залетный (Ruby VM (Virtualbox) инструмент управления, который опирается на шеф-повара или куклу)
VPS (от Slicehost)
ключевой частью является шаблон webdev, который сделал Lau. Папка webdev должна быть помещена в
~/.cake/templates
. Чтобы создать новый проект на его основе использовать:cake new webdev *projectname*
Pls обратите внимание, что шаблон включает в себя log4j и Java mail, которые могут/должны быть исключены, если это не требуется. Далее предполагается, что вы используете Enlive и усы, но изменение этого на Compojure/Hiccup тривиально, если это ваш яд.
шаблон заботится о обслуживании приложения с пристани в разработке (вы просто eval server.clj) и работает как война при работе под Tomcat. Маршруты остаются идентичными, если они развернуты на сервере как КОРЕНЬ.война под котом. Все статические файлы должны быть расположены в каталоге ресурсов. Jetty будет обслуживать их оттуда (благодаря промежуточному программному обеспечению Ring file). В производстве они перемещаются в корень веб-приложения и обслуживаются оттуда Tomcat(the web.xml заботится об этом).
папка devbox содержит Vagrantfile и поваренные книги, необходимые для создания виртуальной машины Virtualbox с установленным Tomcat. Я использую торт для развертывания .военный файл в
/home/vagrant
dir (это контролируется из определения в контексте разработки проекта.clj). Этот.файл война символические ссылки на них в составе Tomcat webapps в Реж (/var/lib/tomcat6/webapps
) как root.война. Для получения дополнительной информации о том, как использовать Vagrant, пожалуйста, смотрите The Vagrant сайт.этой суть показывает пример того, как адаптировать проект.clj для использования команды Cake deploy. В Примере создаются два контекста @dev и @prod, которые можно развернуть с помощью:
cake deploy @dev / cake delpoy @prod
я собрал шаблон Cake webdev и файлы Vagrant в это zip.
У меня был некоторый успех с помощью leiningen-войны для создания общего файла war (при условии, что вы используете leiningen, конечно). Это позволяет указать места для статического html, расположение веб-сайта.xml и другие ресурсы в вашем проекте.файл clj.
Мне было не слишком сложно создать общий файл war, который я смог развернуть в JBoss (запуск Tomcat в качестве контейнера сервлетов), но я думаю, что вы должны быть хорошо знакомы с интернетом.формат XML. Я более комфортно с созданием моей собственной сети.xml, так что, возможно, мне больше нравится этот подход.
похоже, что человек, стоящий за Лейнинген-войной, рекомендует lein-ring сейчас. Я начал смотреть на это, но до сих пор я не смог получить общий файл войны из него так же легко.
Я согласен, хотя учет развертывания производства здесь является слабым местом.
я использую Нуар, веб-фреймворк, построенный поверх кольца и Compojure.
Я создал проект с помощью
lein noir new my-proj
. Тогда я создалmy-proj/web
каталог и добавлены следующие строки вproject.clj: :compile-path "web/WEB-INF/classes" :library-path "web/WEB-INF/lib" :ring {:handler project.server/handler}
Я
my-proj/web
каталог как корневой контекст во время разработки для Tomcat.для статического обслуживания файлов я помещаю материал под
Если вы развертываете на Google App Engine, вот отличный блог http://compojureongae.posterous.com/
вы все еще можете получить некоторые полезные советы, даже если вы не развертываете в GAE.
Я выпустил в производство (уже более 6 месяцев) приложение Compojure + Vaadin. Упаковка была сделана с помощью плагина lein-war, и я не столкнулся с какими-либо серьезными проблемами.
приложение называется halo, содержится в halo.файл war, контекст / halo и сервер tomcat также работает под управлением Hudson и другого пользовательского приложения. Vaadin правильно разрешает все мои статические файлы, CSS, изображения... Я в основном использовал это блоге написать для этого нужно немного клея.
на другой ноте, я тоже бегу Нуар on Heroku и не было никаких проблем с упаковкой и развертыванием, и это тоже в производстве.
Это напрямую не связано с вашим вопросом Compojure, но Clojure в производстве в веб-приложениях, да, определенно.
Если вы используете кольцевой сервер (compojure, noir / lib-noir, luminus и др.), и хотите развернуть как uberjar, чтобы избежать
"Failed to load Main-Class manifest attribute from your-uberjar.jar"
просто создайте uberjar с
lein ring uberjar
. Обратите внимание на дополнение "кольцо" к lein uberjar. Это предполагает, что вы используете плагин lein-ring.