使用Django-Jython和Tomcat进行部署?

时间:2010-07-02 01:35:03

标签: django tomcat jython

我有一个Django应用程序,我们正在尝试使用django-jython部署到Tomcat服务器。

为了测试一下,我已成功为一个空的Django应用程序创建了WAR存档文件。测试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>

任何建议都会非常感激=)。

干杯, 维克多

2 个答案:

答案 0 :(得分:2)

这是一个迟到的答案,但到目前为止我还没有看到这个问题。希望它仍然有帮助。 以下是我一直遵循的步骤(成功)。

1)创建war文件:

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中部署的相同上下文。它将与生成的war文件的名称相同(在本例中为chair.war)。在外部JAR中至少包括JDBC驱动程序。

2)将战争部署到Tomcat(在我使用的任何Tomcat,版本5和5.5中从未出现过问题)。我通过URL http://server:8080/manager/html上的HTML管理器应用程序手动执行 - 它将需要身份验证,使用在Tomcat conf/users.xml中具有管理员权限的用户名/密码我认为(我是从内存中写的)。有很多方法可以使用Ant,Maven或其他工具自动执行此操作,但手动操作很好。

如果您必须手动解压缩文件,请使用与war文件(以及context-root)完全相同的文件夹名称,在本例中为Tomcat安装文件夹中的webapps / chair。

3)从网址http://server:8080/chair/访问您部署的应用(以及urls.py中定义的任何其他网址路径)

Modjy servlet是为您的网址提供服务的服务,其定义如下:

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

如果在http://server:8080/chair/没有看到您的期望,请在HTML管理器中检查应用程序是否真正启动,并检查Tomcat日志中的错误(通常是tomcat安装目录下的logs / catalina.out)

官方文档中的更多信息:http://packages.python.org/django-jython/war-deployment.html

答案 1 :(得分:0)

我没有在web.xml中看到任何实际指定WSGI可调用对象的配置:在运行应用程序之前需要一个配置。

请参阅此处了解如何将callables指定为modjy。

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

或者,将您的web.xml与modjy演示Web应用程序中的web.xml进行比较。

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