Развертывание с Django-Jython и Tomcat? - PullRequest
7 голосов
/ 02 июля 2010

У меня есть приложение Django, которое мы пытаемся развернуть на сервере Tomcat, используя django-jython.

Просто для проверки, я успешно создал файл архива WAR для пустого приложения Django. Тестовое приложение Django называется "стул".

Наш сервер Tomcat явно не любит файлы архивов WAR, поэтому я взорвался (распаковал это) и скопировал эти файлы на сервер.

Администратор веб-сервера создал для меня контекст и каталог для этого контекста (mediatracking).

Я скопировал файлы из архива WAR в этот каталог, и я не совсем уверен, как заставить это тестовое приложение «работать» сейчас?

\mediatracking
 - application.py 
 - application$py.class 
 \WEB-INF 
   web.xml 
   \lib 
    - jruby-extras-fileservlet.jar 
    - jython.jar 
   \lib-python 
     - Lib.pth 
     - README 
     \chair 
     \django 
     \doj 
     \Lib 

и т.д.. (Я не опустился ниже, чем в каталоге chair / django / doj / Lib.)

Чего-то явно не хватает в приведенной выше структуре каталогов?

И как именно я могу заставить сервер Tomcat «запустить» это приложение? Он не запускается автоматически, если вы перейдете в каталог контекста (и там есть только файл application.py и application $ py.class, поэтому я не уверен, как это будет).

Нужно ли просить администратора моего веб-сервера сделать что-то с файлом web.xml? Я проверил это, и там, похоже, нет ничего, что помогло бы запустить это приложение:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>chair</display-name>
  <description>
   chair through WSGI with modjy
  </description>
  <context-param>
    <param-name>files.prefix</param-name> <!-- Needed by fileservlet -->
    <param-value></param-value>
   </context-param>
  <servlet>
    <servlet-name>modjy</servlet-name>
    <servlet-class>com.xhaus.modjy.ModjyJServlet</servlet-class>
    <init-param>
      <param-name>reload_on_mod</param-name>
      <param-value>1</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet>
    <servlet-name>fileservlet</servlet-name>
    <servlet-class>org.jruby.webapp.FileServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>fileservlet</servlet-name>
    <url-pattern>/media/*</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>modjy</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

Любой совет был бы очень признателен =).

Ура, Victor

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Это поздний ответ, но я до сих пор не видел этот вопрос.Надеюсь, это все еще помогает.Вот шаги, которые я всегда выполняю (успешно).

1) Создайте файл войны:

manage war --include-java-libs "...your external jars here..." --context-root=chair

Имя context-root важно, потому что Django-on-Jython будет манипулировать вашимsettings.py файл и измените ваши MEDIA_URL и ADMINMEDIA_URL, чтобы добавить этот контекст (например, MEDIA_URL = '/chair/media/'), и это должен быть тот же контекст, который вы развертываете в Tomcat.Это будет то же имя сгенерированного файла войны (в данном случае chair.war).Во внешние JAR-файлы включите, по крайней мере, ваши драйверы JDBC.

2) Разверните войну на Tomcat (никогда не было проблем ни в одном из используемых мной Tomcat, версии 5 и 5.5).Я делаю это вручную через приложение HTML-менеджер по адресу URL http://server:8080/manager/html - для этого потребуется аутентификация, используйте имя пользователя / пароль с правами администратора в Tomcat conf/users.xml, я думаю (я пишу из памяти).Есть много способов автоматизировать это с помощью Ant, Maven или других инструментов, но руководство вполне подойдет.

Если вам абсолютно необходимо разархивировать файл вручную, используйте имя папки, точно такое же, как у файла war.(и, следовательно, корень контекста), в данном случае webapps / стул в папке установки Tomcat.

3) Получите доступ к развернутому приложению по URL http://server:8080/chair/ (плюс любой дополнительный путь к URL, как определено вurls.py)

Сервлет Modjy - это тот, кто обслуживает ваши URL, как определено в:

  <servlet-mapping>
    <servlet-name>modjy</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

Если вы не видите, что ожидаете в http://server:8080/chair/проверьте в HTML-менеджере, действительно ли приложение было запущено, и проверьте журналы Tomcat на наличие ошибок (обычно это logs / catalina.out в каталоге установки tomcat).

Дополнительная информация в официальном документе: http://packages.python.org/django-jython/war-deployment.html

0 голосов
/ 26 февраля 2011

Я не вижу в вашем файле web.xml никакой конфигурации, которая на самом деле указывает вызываемый объект WSGI: она требуется перед запуском приложения.

Смотрите здесь, как указать вызываемые для modjy.

http://opensource.xhaus.com/projects/modjy/wiki/ModjyLocateCallables

В качестве альтернативы, сравните ваш web.xml с web.xml в демонстрационном веб-приложении modjy.

https://fisheye3.atlassian.com/browse/jython/trunk/jython/Demo/modjy_webapp/WEB-INF/web.xml

...