2017-01-05 4 views
0

после этого guide, у меня есть Mailman 3 с Apache и mod_wsgi на сервере Debian.Перенаправление: mod_wsgi и django

.conf-файл моего виртуального хоста:

ErrorLog /var/log/mailman-web/mailman-web.log 
CustomLog /var/log/mailman-web/mailman-web_access.log combined 
WSGISocketPrefix run/wsgi 
<VirtualHost *:80> 
    ServerName XXXXXXX 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/html 
    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    # Here, use the value of the STATIC_ROOT variable in your Django configuration file (production.py) 
    Alias /robots.txt /usr/local/mailman/mailman-bundler/var/mailman-web/static/hyperkitty/robots.txt 
    Alias /favicon.ico /usr/local/mailman/mailman-bundler/var/mailman-web/static/hyperkitty/favicon.ico 
    Alias /static  /usr/local/mailman/mailman-bundler/var/mailman-web/static 

    <Directory "/usr/local/mailman/mailman-bundler/var/mailman-web/static"> 
     Order deny,allow 
     Allow from all 
     Require all granted 
    </Directory> 

    WSGIScriptAlias//usr/local/mailman/mailman-bundler/bin/mailman-web.wsgi 
    WSGIDaemonProcess mailman-web display-name=mailman-web maximum-requests=1000 processes=1 threads=1 python-path=/usr/local/mailman/venv/lib/python2.7/site-packages 

     <Directory "/usr/local/mailman/mailman-bundler/bin"> 
      <Files mailman-web.wsgi> 
        Order deny,allow 
        Allow from all 
        Require all granted 
      </Files> 
      WSGIProcessGroup mailman-web 
     </Directory> 
</VirtualHost> 

Проблема у меня с этой установкой, когда я иду в http://myhost/ сценарии WSGI перенаправляет мой браузер http://myhost/archives. Я бы хотел, чтобы http://myhost/ был перенаправлен на http://myhost/mailman3, а не http://myhost/archives.

Попытка выяснить, где mailman решает возвратить подкаталог архивов, я заглянул в скрипт wsgi, определенный в файле apache .conf, но не так много происходит, а затем импортирует некоторые классы и вызывает другой скрипт. . После этого сценария я приземлилась в файле '/ яйца/Джанго-1.10.4-py2.7.egg/Джанго/ядро ​​/ обработчики/wsgi.py`, в частности, эта часть:

148 class WSGIHandler(base.BaseHandler): 
149  request_class = WSGIRequest 
150 
151  def __init__(self, *args, **kwargs): 
152   super(WSGIHandler, self).__init__(*args, **kwargs) 
153   self.load_middleware() 
154 
155  def __call__(self, environ, start_response): 
156   set_script_prefix(get_script_name(environ)) 
157   signals.request_started.send(sender=self.__class__, environ=environ) 
158   try: 
159    request = self.request_class(environ) 
160   except UnicodeDecodeError: 
161    logger.warning(
162     'Bad Request (UnicodeDecodeError)', 
163     exc_info=sys.exc_info(), 
164     extra={ 
165      'status_code': 400, 
166     } 
167   ) 
168    response = http.HttpResponseBadRequest() 
169   else: 
170    response = self.get_response(request) 
171 
172   response._handler_class = self.__class__ 
173 
174   status = '%d %s' % (response.status_code, response.reason_phrase) 
175   response_headers = [(str(k), str(v)) for k, v in response.items()] 
176   for c in response.cookies.values(): 
177    response_headers.append((str('Set-Cookie'), str(c.output(header='')))) 
178   start_response(force_str(status), response_headers) 
179   if getattr(response, 'file_to_stream', None) is not None and environ.get('wsgi.file_wrapper'): 
180    response = environ['wsgi.file_wrapper'](response.file_to_stream) 
181   return response 

Я думаю, что решение возвращенного подкаталога происходит где-то здесь, но я могу ошибаться, не уверен.

То, что я пытался до сих пор: В апач конф файл я добавил строку Redirect permanent/http://myhost/mailman3, но это сделало апач идти в переназначения петлю, заканчивающийся в URL, как http://myhost/mailman3mailman3mailman3....

Я надеюсь, что кто-то может помочь мне с этой проблемой ,

Заранее благодарен!

ответ

0

Я думаю, что решение подкаталога вернулось

Это проект Django, поэтому ссылки не о подкаталогах, они согласованы с «просмотреть» функцию в Django. В этом случае, «решение» происходит здесь:

https://gitlab.com/mailman/mailman-bundler/blob/master/mailman_web/urls.py

urlpatterns = patterns('', 
    url(r'^$',RedirectView.as_view(url=reverse_lazy('hyperkitty.views.index.index'))), 
    url(r'^mailman3/', include('postorius.urls')), 
    url(r'^archives/', include('hyperkitty.urls')), 
    url(r'', include('social.apps.django_app.urls', namespace='social'), {"SSL": True}), 
    url(r'', include('django_browserid.urls'), {"SSL": True}), 
) 

, и вы можете видеть, что «корень» URL («г„^ $“») устанавливается для перенаправления hyperkitty.views .index.index (hyperkitty быть архиватор)

Если вы хотите иметь корневой URL перенаправления на «/ mailman3 /» вместо этого, вы должны изменить первую строку url()

url(r'^$',RedirectView.as_view(url="/mailman3/")), 

Обратите внимание, что вам придется поддерживать эту вилку каждый раз, когда вы обновляете пакет.

NB: есть «лучше» (безопаснее/чище/проще в обслуживании) способы сделать то же самое (используя собственный модуль настроек django вместо значения по умолчанию и делая его ROOT_URL_CONF указывать на владельца копировать/вставлять/отредактированная версия этого файла urls.py и, наконец, с помощью правильного reverse_lazy вместо hardcoding url), но если вы мало знаете о Django, то это решение (немного Q & D) на сегодняшний день является самым простым.

+0

Спасибо, это сработало! –

+0

Удостоверьтесь, что вы задокументируете свои изменения, поэтому любой, кто должен поддерживать вашу установку, знает об этом, и, возможно, потребуется время, чтобы изучить «лучшие способы» (что означает чтение документации Django о том, как конкретно использовать модуль настроек для использования и т. Д.), Поскольку это будет упростите вашу настройку. –