【问题标题】:Deploying with Django-Jython, and Tomcat?使用 Django-Jython 和 Tomcat 进行部署?
【发布时间】:2011-03-10 22:01:44
【问题描述】:

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

只是为了测试一下,我已经成功地为一个空的 Django 应用程序创建了 WAR 存档文件。测试 Django 应用程序称为“椅子”。

我们的 Tomcat 服务器显然不喜欢 WAR 存档文件,所以我解压(解压缩),并将这些文件复制到服务器。

网络服务器管理员为我创建了一个上下文,并为该上下文创建了一个目录(媒体跟踪)。

我已将 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>

任何建议都将不胜感激 =)。

干杯, 维克多

【问题讨论】:

    标签: django tomcat jython


    【解决方案1】:

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

    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 文件(以及上下文根目录)完全相同的文件夹名称,在本例中为 Tomcat 安装文件夹中的 webapps/chair。

    3) 从 URL http://server:8080/chair/(加上 urls.py 中定义的任何其他 url 路径)访问您部署的应用程序

    Modjy servlet 是运行为您的 url 提供服务的服务程序,定义如下:

      <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

    【讨论】:

    【解决方案2】:

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

    请参阅此处了解如何为 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

    【讨论】:

      猜你喜欢
      • 2017-05-31
      • 2020-06-03
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 2015-06-30
      • 2018-05-22
      相关资源
      最近更新 更多