2

我有问题需要帮助!我有一个 django 应用程序,它位于 apache 服务器上。在您升级到 django 2.0.5 之前,它一直运行正常。

该应用程序由cherrypy 和apache 提供。apache 做反向代理的地方。当我输入地址时,它会删除 apache 创建的目标。例如:域是“www.example.com”,应用程序位于“www.example.com/app”。在浏览器中输入应用程序的地址时,会重定向到登录页面,但去掉“/app/”,从而使“www.example.com/security/enter”,此时应该是“www.example.com” /应用程序/安全/进入”。

如果我手动将“/app/”系统正常工作,服务器静态文件和其他所有内容,但是在请求新页面时,它总是删除“/app/”,迫使它手动投入工作。

下面是我用来启动和运行应用程序的模板:

/etc/httpd/conf.d/ 中的文件 app.conf:

<VirtualHost *:*>
    ServerName example.com
    ProxyPreserveHost On
    ProxyPass /app/ http://example.com:8000/
    ProxyPassReverse /app/ http://example.com:8000/
</VirtualHost>

文件 cps.py(cherrypy 脚本):

#!/opt/app/env/bin python
# -*- coding: utf-8 -*-

import os

os.environ["DJANGO_SETTINGS_MODULE"] = "app.settings"

import cherrypy
import django
django.setup()
from django.conf import settings
from django.core.handlers.wsgi import WSGIHandler


class DjangoApplication(object):
    HOST = "0.0.0.0"
    PORT = 8000

    def mount_static(self, url, root):
        config = {
            'tools.staticdir.on': True,
            'tools.staticdir.dir': root,
            'tools.expires.on': True,
            'tools.expires.secs': 86400
        }
        cherrypy.tree.mount(None, url, {'/app/': config})

    def run(self):
        cherrypy.config.update({
            'server.socket_host': self.HOST,
            'server.socket_port': self.PORT,
            'engine.autoreload_on': False,
            'log.screen': True
        })

        self.mount_static(settings.STATIC_URL, settings.STATIC_ROOT)

        cherrypy.log("Load application app")
        cherrypy.tree.graft(WSGIHandler())
        cherrypy.engine.start()
        cherrypy.engine.block()


if __name__ == "__main__":
    DjangoApplication().run()

我不认为这个问题与将 django 版本从 1.11 更新到 2.0.5 有关,因为在开发环境中它可以正常工作。该应用程序运行了几天,但是当我需要更新视图时,我遇到了这个问题。

它适用于带有 Python 3.6 的 virtualenv。我研究了很多,但我找不到导致我出错的东西,所以我求助于这个话题,因为我总是在这里找到很多好东西!谢谢和对不起我的英语,这是基本的!

4

0 回答 0