我有问题需要帮助!我有一个 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。我研究了很多,但我找不到导致我出错的东西,所以我求助于这个话题,因为我总是在这里找到很多好东西!谢谢和对不起我的英语,这是基本的!