Как подавать джанго с Apache и Cherrypy - PullRequest
0 голосов
/ 01 июня 2018

У меня проблема, и мне нужна помощь!У меня есть приложение 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/security/enter".

Если я вручную поставлю "/ app /", система работает нормально, сервер статических файлов и все остальное, но при запросе новой страницы всегда удаляет "/ app/ ", принудительно заставляя его работать вручную.

Ниже приведен шаблон, который я использовал для запуска и запуска приложения:

Файл app.conf в / etc / httpd /conf.d /:

<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, потому что в среде разработки он работает нормально.Приложение работало в течение нескольких дней, но когда мне нужно обновить представление, я получил эту проблему.

Он работает в virtualenv с Python 3.6.Я много исследовал, но не могу найти то, что приводит меня к ошибке, поэтому я прибегаю к этой теме, потому что я всегда нахожу здесь много хорошего!Спасибо и извините за мой английский, это просто!

...