2010-07-02 10 views
6

Mam aplikację Django, którą próbujemy wdrożyć na serwerze Tomcat, używając django-jython.Rozmieszczanie z Django-Jython i Tomcat?

Aby przetestować różne rzeczy, pomyślnie utworzyłem plik archiwum WAR dla pustej aplikacji Django. Testowa aplikacja Django nosi nazwę "krzesło".

Nasz serwer Tomcat najwyraźniej nie lubi plików archiwów WAR, więc eksplodowałem (rozpakowałem to) i skopiowałem te pliki na serwer.

Administrator serwera sieciowego utworzył dla mnie kontekst i katalog dla tego kontekstu (mediatracking).

Skopiowałem pliki z archiwum WAR do tego katalogu i nie jestem do końca pewien, jak uruchomić teraz tę aplikację testową?

\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 

itd. (Ja nie zszedł niższa niż w katalogu Krzesło/Django/DoJ/lib.)

Czy jest coś oczywiste brakuje powyższej struktury katalogów?

Jak dokładnie mogę uzyskać serwer Tomcat, aby rzeczywiście "uruchamiał" tę aplikację? Nie uruchamia się automatycznie, jeśli przejdziesz do katalogu kontekstowego (a tam jest tylko plik application.py i aplikacja $ py.class, więc nie jestem pewien jak to by było).

Czy muszę poprosić administratora mojego serwera webowego, aby zrobił coś z plikiem web.xml? Sprawdziłem to, i nie wydaje się być cokolwiek tam, że pomogłoby to aplikacja uruchomić albo:

<?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> 

Wszelkie porady w ogóle byłoby bardzo mile widziane =).

Cheers, Victor

Odpowiedz

2

Jest to późna odpowiedź, ale nie widziałem to pytanie tak daleko. Mam nadzieję, że nadal pomaga. Oto kroki, które zawsze podążam (pomyślnie).

1) Utwórz plik War:

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

Nazwa context-root jest ważne, ponieważ Django-on-Jython będzie manipulować plik settings.py i zmodyfikować MEDIA_URL i ADMINMEDIA_URL dodać, że kontekst (np MEDIA_URL = '/chair/media/'), i musi to być ten sam kontekst, w którym zostanie wdrożony Tomcat. Będzie to ta sama nazwa wygenerowanego pliku wojny (w tym przypadku chair.war). W zewnętrznych plikach JAR znajdują się co najmniej sterowniki JDBC.

2) Rozmieść wojnę z Tomcat (nigdy nie było problemu w każdym Tomcat, którego użyłem, wersje 5 i 5.5). Robię to ręcznie poprzez aplikację zarządzającą HTML pod adresem URL http://server:8080/manager/html - będzie wymagać uwierzytelnienia, użyj nazwy użytkownika/hasła, które ma uprawnienia menedżera w Tomcat's conf/users.xml Myślę (piszę z pamięci). Istnieje wiele sposobów na zautomatyzowanie tego za pomocą Ant, Maven lub innych narzędzi, ale instrukcja jest w porządku.

Jeśli musisz bezwzględnie ręcznie rozpakować plik, użyj nazwy folderu, która jest dokładnie taka sama jak pliku wojennego (a więc kontekstowego katalogu głównego), w tym przypadku webapps/chair w folderze instalacyjnym Tomcat.

3) Uzyskaj dostęp do wdrożonej aplikacji z adresu URL http://server:8080/chair/ (plus dowolna dodatkowa ścieżka URL zdefiniowana w adresach URL.py)

Modjy aplet jest jeden uruchomiony podaniem adresów URL, jak określono w:

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

Jeśli nie widzisz, czego można się spodziewać w http://server:8080/chair/ sprawdzić w menedżerze HTML, czy aplikacja została naprawdę zaczęło i sprawdź logi Tomcat pod kątem błędów (zazwyczaj logs/catalina.out na katalogu instalacyjnym tomcat).

Więcej informacji w oficjalnym dokumencie: http://packages.python.org/django-jython/war-deployment.html