2010-07-02 14 views
6

Ho un'app Django che stiamo tentando di distribuire su un server Tomcat, usando django-jython.Distribuzione con Django-Jython e Tomcat?

Solo per testare le cose, ho creato con successo il file di archivio WAR per un'app Django vuota. L'applicazione di prova di Django si chiama "sedia".

Il nostro server Tomcat a quanto pare non ama i file di archivi WAR, quindi sono esploso (decompresso questo) e copiato questi file sul server.

L'amministratore del server Web ha creato un contesto per me e una directory per tale contesto (tracciamento multimediale).

Ho copiato i file dall'archivio WAR in quella directory, e non sono abbastanza sicuro di come far funzionare l'app di test ora?

\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 

ecc (non ho disceso inferiore a quella nella// lib sedia Django DoJ /.)

C'è qualcosa evidente manca dalla struttura di directory di cui sopra?

E in che modo esattamente il server Tomcat "esegue" effettivamente questa app? Non viene eseguito automaticamente se si accede alla directory di contesto (e c'è solo un file application.py e application $ py.class lì, quindi non sono sicuro di come sarebbe).

Devo chiedere al mio server web admin di fare qualcosa con il file web.xml? Ho controllato che, e ci non sembra essere nulla in là che avrebbe aiutato questa applicazione eseguito sia:

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

Qualche consiglio a tutti sarebbe molto apprezzato =).

Cheers, Victor

risposta

2

Questa è una risposta in ritardo, ma non aveva visto questa domanda finora. Spero che aiuti ancora. Ecco i passaggi che seguo sempre (con successo).

1) Creare il file di guerra:

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

Il nome del context-root è importante perché Django-on-Jython sarà manipolare il file settings.py e modificare il MEDIA_URL e ADMINMEDIA_URL aggiungere quel contesto (ad esempio MEDIA_URL = '/chair/media/'), e deve essere lo stesso contesto in cui viene distribuito in Tomcat. Sarà lo stesso nome del file di guerra generato (in questo caso chair.war). Nei JAR esterni sono inclusi almeno i driver JDBC.

2) Distribuire la guerra a Tomcat (non è mai stato un problema in nessun Tomcat utilizzato, versioni 5 e 5.5). Lo faccio manualmente attraverso l'app manager HTML all'URL http://server:8080/manager/html - richiede l'autenticazione, usa un nome utente/password che abbia i privilegi di gestore in conf/users.xml di Tomcat, penso (sto scrivendo dalla memoria). Ci sono molti modi per automatizzarlo con Ant, Maven o altri strumenti, ma il manuale va bene.

Se si deve assolutamente svelare il file manualmente, utilizzare un nome di cartella che è esattamente lo stesso del file di guerra (e quindi del root di contesto), in questo caso webapps/chair nella cartella di installazione di Tomcat.

3) Accedi all'app distribuita dall'URL http://server:8080/chair/ (più qualsiasi percorso URL aggiuntivo definito in URL).py)

Il servlet Modjy è quella in esecuzione servire gli URL, come definito:

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

Se non si vede che cosa si aspetta a http://server:8080/chair/ check-in manager HTML se l'applicazione è stata davvero iniziato e controlla la presenza di errori nei log di Tomcat (generalmente registri/catalina.out nella directory di installazione di tomcat).

Maggiori informazioni nel documento ufficiale: http://packages.python.org/django-jython/war-deployment.html

Problemi correlati