Обслуживание статических файлов с помощью Twisted и Django в некорневых папках

Я занимаюсь переносом приложения (Sage) с Twisted на Django.

Статическая документация в настоящее время обслуживается под /doc/static, а живая (созданная на лету) документация обслуживается под /doc/live.

Можно ли использовать Twisted только для обслуживания /doc/static, оставив Django для обслуживания остальных /doc/*?


person Tim Dumol    schedule 10.09.2009    source источник


Ответы (3)


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

Если вам нужно, чтобы Twisted обслуживал статические файлы, то вам нужно либо взломать в django прокси-сервер для этих файлов, либо бросить что-то перед всем этим. Также Perlbal с VPATH может сделать это, он возьмет регулярные выражения URL-адресов и заставит их обращаться к нужным службам.

Если вам не нужно использовать Twisted, есть много разных способов сделать это. Вы все еще можете использовать Perlbal или что-то подобное для обслуживания статических файлов, что вам в любом случае нужно в долгосрочной перспективе.

person af.    schedule 10.09.2009
comment
Мы включаем Twisted как удобный способ размещения Sage Notebook, поэтому о втором варианте не может быть и речи. Проксирование запросов от Django к Twisted кажется правдоподобным, но кажется, что это сводит на нет прирост производительности, позволяя Twisted обслуживать их напрямую. Я проведу несколько тестов. Спасибо! - person Tim Dumol; 10.09.2009

Взгляните на эту ссылку о том, как запустить Django поверх Twisted: (инструкция скопирована из блога)

  1. easy_install Скрученный
  2. easy_install Джанго
  3. Выгода!
  4. django-admin.py startproject foo
  5. Создайте myapp.py со следующим кодом:

    из django.core.handlers.wsgi импортировать WSGIHandler

    приложение = WSGIHandler()

  6. экспорт DJANGO_SETTINGS_MODULE=foo.settings

  7. Twistd -нет сети --wsgi=myapp.application

Далее в комментариях есть пример того, как обслуживать мультимедиа напрямую с помощью Twisted до того, как запрос будет передан Django:

Для обработки медиафайлов просто используйте «static.File» из «twisted.web», например: staticrsrc = static.File(os.path.join(os.path.abspath("."), "mydjangosite/media")) а затем добавьте этот ресурс в свой корневой ресурс следующим образом: root.putChild("media", staticrsrc)

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

РЕДАКТИРОВАТЬ: На эту тему также написана другая статья с инструкциями о том, как заставить ее работать здесь, что, похоже, включает сервер статических файлов напрямую с Twisted.

person Andre Miller    schedule 11.09.2009
comment
Первая ссылка не работает. - person g19fanatic; 13.11.2013

Если я неправильно понял вопрос, почему бы просто не переписать URL-адрес /doc/static в Twisted еще до того, как он достигнет Django (т.е. на уровне Apache/прокси)?

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

person pithyless    schedule 10.09.2009
comment
Мы используем Twisted для обслуживания наших файлов без какого-либо другого уровня абстракции — по крайней мере, для локальных установок. Таким образом, использование mod_rewrite невозможно. - person Tim Dumol; 10.09.2009