Python 同一虚拟主机上的两个django应用程序出现间歇性问题

Python 同一虚拟主机上的两个django应用程序出现间歇性问题,python,django,apache,mod-wsgi,virtualhost,Python,Django,Apache,Mod Wsgi,Virtualhost,我有两个Django应用程序(appsystem和testapp)在不同的文件夹中运行,它们在相同的apache虚拟主机设置中启用(请参见最后的conf文件) 一个应用程序在域的根上显示一个页面,该页面似乎总是工作正常,但是当我转到一个应该转到第二个应用程序的URL时,它第一次失败,抱怨它找不到数据库表,尽管我可以在调试页面中看到加载了正确的设置 如果我刷新页面,那么它(testapp)工作正常,并一直持续到我从AppSystem返回页面为止。如果我这样做并返回testapp,我必须刷新页面 这

我有两个Django应用程序(appsystem和testapp)在不同的文件夹中运行,它们在相同的apache虚拟主机设置中启用(请参见最后的conf文件)

一个应用程序在域的根上显示一个页面,该页面似乎总是工作正常,但是当我转到一个应该转到第二个应用程序的URL时,它第一次失败,抱怨它找不到数据库表,尽管我可以在调试页面中看到加载了正确的设置

如果我刷新页面,那么它(testapp)工作正常,并一直持续到我从AppSystem返回页面为止。如果我这样做并返回testapp,我必须刷新页面

这两个应用程序都使用sqlite进行身份验证,但是从appsystem的设置文件中删除身份验证和sqlite引用似乎没有什么不同

我这样做的原因是,显示根页面(以及一些具有唯一URL的管理页面)的应用程序将列出安装的其他django应用程序,并显示要单击的链接

我还怀疑它可能与会话有关,因为我可以在另一个浏览器中直接转到testapp,即使在第一个实例中也可以正常工作。正因为如此,我给了每个django应用程序自己的SESSION\u COOKIE\u名称值,但这似乎没有帮助

有人知道问题出在哪里吗

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /app_www_root

    RewriteEngine On
        # the root of the box should show the system index - a list of installed apps
        RewriteRule ^/$ /appsystem/system_index/ [PT]

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /app_www_root/>
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

    Include /etc/apache2/installed-apps/

    ## this is what gets pulled in by the include ##
    Alias                 /testapp/static       /testapp/static
    Alias                 /testapp/logs         /var/log/testapp
    WSGIScriptAliasMatch  ^/testapp             /testapp/django.wsgi

    <Directory "/testapp">
        Order allow,deny
        Allow from all
    </Directory>

    <Directory "/var/log/testapp">
        Order allow,deny
        Allow from all
    </Directory>

    <Location "/testapp/logs">
        SetHandler none
        Options +Indexes
    </Location>

    <Location "/testappl/static">
        SetHandler none
        Options -Indexes
        Options +Includes
        AddOutputFilter INCLUDES .html
    </Location>
    ## end of included file ##

  # wsgi docs advise against trailing slash below
  WSGIScriptAlias /appsystem  /app_sys/django.wsgi

</VirtualHost>

服务器管理员webmaster@localhost
DocumentRoot/app\u www\u root
重新启动发动机
#该框的根目录应显示系统索引-已安装应用程序的列表
重写规则^/$/appsystem/system_index/[PT]
选项如下符号链接
不允许超限
命令允许,拒绝
通融
ErrorLog/var/log/apache2/error.log
#可能的值包括:调试、信息、通知、警告、错误、临界值、,
#警惕,埃默格。
日志级别警告
CustomLog/var/log/apache2/access.log组合
包括/etc/apache2/已安装的应用程序/
##这就是include的作用##
别名/testapp/static/testapp/static
别名/testapp/logs/var/log/testapp
WSGIScriptAliasMatch^/testapp/testapp/django.wsgi
命令允许,拒绝
通融
命令允许,拒绝
通融
SetHandler无
选项+索引
SetHandler无
选项-索引
选项+包括
AddOutputFilter包含.html
##包含文件的结尾##
#wsgi文档建议不要使用下面的尾随斜杠
WSGIScriptAlias/appsystem/app_sys/django.wsgi
你读过吗

如果您在守护进程模式下使用mod_wsgi(即通过WSGIDaemonProcess),我怀疑您的问题会得到解决。

您读过吗


如果您在守护进程模式下使用mod_wsgi(即通过WSGIDaemonProcess),我怀疑您的问题会得到解决。

尝试在带有modwsgi的virtualenv中运行它们。

尝试在带有modwsgi的virtualenv中运行它们。

FWIW,您的配置存在各种问题

  • 为什么要使用WSGIScriptAliasMatch指令?您应该将其替换为WSGIScriptAlias。不要正确使用WSGIScriptAliasMatch,它可能会阻塞反向URL解析

  • 不需要使用“SetHandler none”。这是您可能需要为mod_python做的事情,但不是mod_wsgi

  • 使用位置指令块将指令应用于静态文件资源是一种不好的做法。您应该使用Directory指令将它们应用于特定目录


  • 正如其他人指出的,最好使用守护程序模式。如果这样做有效,但您将两个应用程序都委托给同一个单守护进程模式进程,那么您可能会遇到多进程问题,即,您的应用程序无法处理同时在多个进程中运行的问题。如果您将每个进程委派给它自己的守护进程组,那么即使在单独的子解释器中运行它们,您也可能会遇到在同一进程中运行它们的问题。

    FWIW,您的配置存在各种问题

  • 为什么要使用WSGIScriptAliasMatch指令?您应该将其替换为WSGIScriptAlias。不要正确使用WSGIScriptAliasMatch,它可能会阻塞反向URL解析

  • 不需要使用“SetHandler none”。这是您可能需要为mod_python做的事情,但不是mod_wsgi

  • 使用位置指令块将指令应用于静态文件资源是一种不好的做法。您应该使用Directory指令将它们应用于特定目录


  • 正如其他人指出的,最好使用守护程序模式。如果这样做有效,但您将两个应用程序都委托给同一个单守护进程模式进程,那么您可能会遇到多进程问题,即,您的应用程序无法处理同时在多个进程中运行的问题。如果您将每个进程委派给自己的守护进程组,那么即使在单独的子解释器中运行它们,您也可能会遇到在同一进程中运行它们的问题。

    。我可以试着给他们自己的virtualhost conf文件,而不是将它们全部包含在一个文件中,看看这是否会有所不同。我也不确定这是否有效。我的错——我犯了一个错误。我已经纠正了它,是的,守护进程模式似乎已经修复了它。谢谢我已经尝试过了,这使得只有第一个应用程序才能如此有效地被看到,而你只能使用appsystem。我可以试着给他们自己的virtualhost conf文件,而不是将它们全部包含在一个文件中,看看这是否会有所不同。我也不确定那是否管用。我的错——我犯了个错误