Развертывание с Django-Jython и Tomcat?

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

просто чтобы проверить вещи, я создал файл архива войны для пустого приложения Django успешно. Тестовое приложение Django называется "стул".

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

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

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

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 

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

есть ли что-нибудь очевидное, отсутствующее в вышеуказанной структуре каталогов?

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

мне нужно попросить моего администратора веб-сервера что-то сделать с интернетом.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>

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

Ура, Виктор!--3-->

2 ответов


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

1) Создать war-файл:

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

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

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

Если вам абсолютно необходимо размотать файл вручную, используйте имя папки, которое точно совпадает с именем файла war (и, следовательно, с контекстным корнем), в этом случае webapps/chair в папке установки 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 at the tomcat installation dir).

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


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

см. здесь, Как указать вызываемые объекты в modjy.

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

кроме того, сравните свой веб.xml с помощью интернета.xml в демонстрационной сети modjy приложение.

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