Как интегрировать веб-приложения Clojure в Apache


Примечание

учитывая, что эта операция была написана около двух лет назад, вместо того, чтобы снова задавать один и тот же вопрос, мне интересно, существуют ли пошаговые инструкции, чтобы я мог интегрировать Noir или другое веб-приложение Clojure в Apache, будь то Jetty, Tomcat или что-то еще. Подобные инструкции существуют для Django, и я думаю, что понимаю, что Python запускается в случае Django как двигатель, а не Кольцевой фреймворк, поэтому все больше сложнее с Clojure web-приложений.

На

Я глубоко влюблен в Clojure, и Compojure кажется аккуратным веб-фреймворком.

но все это развалилось, когда я хотел развернуть свое приложение на обычном сервере приложений, таком как Tomcat, как война. На самом деле мне пришлось написать пользовательские обработчики колец для статических файлов и ресурсов, которые будут работать как на локальном причале, так и на Tomcat, потому что обработчики запасов этого не сделали, и мне пришлось добавьте корень контекста везде вручную.

Я отрицательно поражен тем, что мне пришлось написать весь этот код, чтобы создать самое простое веб-приложение, которое могло бы работать как на Jetty, так и на Tomcat. У меня есть только три возможных объяснения этому:

  1. никто не использует Clojure / Compojure для чего-либо, кроме локального развития с причалом, т. е. в производстве
  2. все развертывают приложения Clojure / Compojure на выделенном причале без корневого контекста (Как люди делают это с узлом.js apps)
  3. есть очень простой способ обойти проблемы, с которыми я столкнулся, я не знал об этом

какой из них по вашему мнению дело? Или что-то другое?

Edit:

обратите внимание, что создание файла war-это не проблема с Maven/Leiningen, а не то, что я имею в виду. Мне интересно, что мне нужно написать так много кода, чтобы Compojure работал с Tomcat, основные вещи, такие как static обслуживание файлов и контекст корневой осведомленности, что должны работа из коробки.

7 56

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.