|
master ↓
|
 |
|
29 Ноябрь, 2011, 07:20:03
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
Если настроить mod_wsgi на document root, то он обрабатывает все запросы, в том числе и к статическим файлам. Пример:
<VirtualHost *:80>
ServerName mysite
DocumentRoot /var/sites/mysite/public
WSGIScriptAlias / /var/sites/mysite/script.wsgi
</VirtualHost>
В public я кладу файл logo.png и хочу чтобы запросы обрабатывались следующим образом:
http://my-site/logo.png - файл существует и напрямую отдаётся апачем
http://my-site/any-url - файл не существует и обрабатывается mod_wsgi
В случае с php это делается так:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php
т.е. RewriteRule вступает в действие только если url не совпадает с файлом или директорией. Хочу чтобы mod_wsgi работал аналогично - как это сделать?
Алиасы в VirtualHost не хочу использовать потому что во-первых конфигурацию приложения придётся частично переносить в конфигурацию сервера, а во-вторых нарушается правило питона "явное лучше чем неявное".
|
|
|
|
« Последнее редактирование: 29 Ноябрь, 2011, 07:20:03 от master »
|
Записан
|
|
|
|
|
master ↓
|
 |
|
17 Март, 2012, 08:32:57 , спустя 109 дней 1 час 12 минут 54 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
Одно из решений - добавить RewriteRule в раздел VirtualHost
http://nemesisdesign.net/blog/coding/setup-django-staticgenerator-apache-mod_wsgi/
<VirtualHost *:80>
ServerName mysite
DocumentRoot /var/sites/mysite/public
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule (.*) /index.py/$1 [L,QSA,PT]
WSGIScriptAlias /index.py /var/sites/mysite/script.wsgi
</VirtualHost>
|
|
|
|
« Последнее редактирование: 17 Март, 2012, 08:32:57 от master »
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
29 Ноябрь, 2011, 08:58:12 , спустя
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17633 Сила слова: 1.67
|
1) Зачем тебе apache? Я бы использовал Nginx+uwsgi или Nginx+fastcgi
2) Можно в принципе рулить в самой джанге (urls.py):
from django.conf.urls.defaults import patterns, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = patterns('',
...
)
urlpatterns += staticfiles_urlpatterns()
Спустя 2 минуты 54 секунды добавил Во втором варианте удобно тем, что мы вообще не зависим от вебсервера, будет работать везде (runserver, runcpdebug/runcpserver, nginx/apache)
|
|
|
|
|
Записан
|
|
|
|
|
vasa_c ↓
|
 |
|
29 Ноябрь, 2011, 09:02:31 , спустя 4 минуты 19 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 81
Сообщений: 2459 Сила слова: 3.29
|
adw0rd, и чего джанга и статику выдавать будет?
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
29 Ноябрь, 2011, 09:06:19 , спустя 3 минуты 48 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17633 Сила слова: 1.67
|
vasa_c, да
|
|
|
|
|
Записан
|
|
|
|
|
master ↓
|
 |
|
17 Март, 2012, 08:33:43 , спустя 108 дней 23 часа 27 минут 24 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
adw0rd, апач уже установлен, мне его лень выкидывать. но допустим я его снесу, в варианте Nginx+uwsgi будет отдача статики как мне нужно?
Можно в принципе рулить в самой джанге (urls.py)
можно и в джанге, но 1 - вдруг не джанга, и 2 - не будет ли питон лишнюю память кушать при отдаче файла в 100500 мегабайт?
|
|
|
|
« Последнее редактирование: 17 Март, 2012, 08:33:43 от master »
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
29 Ноябрь, 2011, 09:40:29 , спустя
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17633 Сила слова: 1.67
|
adw0rd, апач уже установлен, мне его лень выкидывать. но допустим я его снесу, в варианте Nginx+uwsgi будет отдача статики как мне нужно?
её будет отдавать nginx Спустя 30 секунд добавил можно и в джанге, конечно, но 1 - вдруг не джанга, и 2 - не будет ли питон лишнюю память кушать при отдаче файла в 100500 мегабайт?
думаю не будет, но сорцы я не смотрел, надо профайлить
|
|
|
|
|
Записан
|
|
|
|
|
master ↓
|
 |
|
29 Ноябрь, 2011, 09:44:42 , спустя 4 минуты 13 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
adw0rd, а какой вообще python-way для этой типовой задачи (отдачи статики)?
|
|
|
|
|
Записан
|
|
|
|
|
phpdude ↓
|
 |
|
29 Ноябрь, 2011, 09:46:15 , спустя 1 минуту 33 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: д-о-х-у-я! Сила слова: 1.66
|
adw0rd, а какой вообще python-way для этой типовой задачи (отдачи статики)?
ваще странынй вопрос)) отдача статики это вей веб сервера независимо от языка у всех нормальных людей)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
adw0rd ↓
|
 |
|
29 Ноябрь, 2011, 09:51:28 , спустя 5 минут 13 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17633 Сила слова: 1.67
|
Думаю тут не особо сказывается именно python-way, тут вообще web-way это отдавать статику через легкие вебсервера, такие как Nginx
Да и вообще все зависит от задачи, но в целом лучше через Nginx
И ещё я думаю надо ресайзить картиночки и т.д. через nginx, кеш ресайза тоже через Nginx.
Когда нет такой возможности (поставить Nginx), то тогда на Django или другом фреймворке Спустя 2 минуты 54 секунды добавил Вот глянул конечный респонс для статики в Django (django.views.static):
def serve(request, path, document_root=None, show_indexes=False):
"""
Serve static files below a given point in the directory structure.
To use, put a URL pattern such as::
(r'^(?P<path>.*)$', 'django.views.static.serve', {'document_root' : '/path/to/my/files/'})
in your URLconf. You must provide the ``document_root`` param. You may
also set ``show_indexes`` to ``True`` if you'd like to serve a basic index
of the directory. This index view will use the template hardcoded below,
but if you'd like to override it, you can create a template called
``static/directory_index.html``.
"""
path = posixpath.normpath(urllib.unquote(path))
path = path.lstrip('/')
newpath = ''
for part in path.split('/'):
if not part:
# Strip empty path components.
continue
drive, part = os.path.splitdrive(part)
head, part = os.path.split(part)
if part in (os.curdir, os.pardir):
# Strip '.' and '..' in path.
continue
newpath = os.path.join(newpath, part).replace('\\', '/')
if newpath and path != newpath:
return HttpResponseRedirect(newpath)
fullpath = os.path.join(document_root, newpath)
if os.path.isdir(fullpath):
if show_indexes:
return directory_index(newpath, fullpath)
raise Http404("Directory indexes are not allowed here.")
if not os.path.exists(fullpath):
raise Http404('"%s" does not exist' % fullpath)
# Respect the If-Modified-Since header.
statobj = os.stat(fullpath)
mimetype, encoding = mimetypes.guess_type(fullpath)
mimetype = mimetype or 'application/octet-stream'
if not was_modified_since(request.META.get('HTTP_IF_MODIFIED_SINCE'),
statobj.st_mtime, statobj.st_size):
return HttpResponseNotModified(mimetype=mimetype)
response = HttpResponse(open(fullpath, 'rb').read(), mimetype=mimetype)
response["Last-Modified"] = http_date(statobj.st_mtime)
response["Content-Length"] = statobj.st_size
if encoding:
response["Content-Encoding"] = encoding
return response
Хоть с виду он и излишен, но решает поставленую задачу сполна
Да и по скорости это будет не особо заметно.
Но есть это проект связанный с отдачей большого кол-ва статики, то я бы не стал юзать Django для этого без подстраховки кеша вебсервера и/или CDN
|
|
|
|
|
Записан
|
|
|
|
|
master ↓
|
 |
|
29 Ноябрь, 2011, 09:59:16 , спустя 7 минут 48 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
отдача статики это вей веб сервера независимо от языка у всех нормальных людей
дык в mod_wsgi этой возможности почему-то нет. и джанга в новом проекте папку public не создаёт, хотя это именно веб-фреймворк. и ставить предлагают два веб-сервера, а если один - выкручивайся как хочешь. странно всё это
|
|
|
|
|
Записан
|
|
|
|
|
phpdude ↓
|
 |
|
29 Ноябрь, 2011, 10:01:11 , спустя 1 минуту 55 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 345
Сообщений: 20790 Сила слова: 1.66
|
и правда странно oO
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
Ivan ↓
|
 |
|
29 Ноябрь, 2011, 11:03:08 , спустя 1 час 1 минуту 57 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 27
Сообщений: 1366 Сила слова: 1.98
|
Переходите все на нжинкс и не трахайте себе мозг
|
|
|
|
|
Записан
|
|
|
|
|
master ↓
|
 |
|
29 Ноябрь, 2011, 11:18:08 , спустя 15 минут
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
Ivan, а чо там?
|
|
|
|
|
Записан
|
|
|
|
|
Ivan ↓
|
 |
|
29 Ноябрь, 2011, 11:39:36 , спустя 21 минуту 28 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 27
Сообщений: 1366 Сила слова: 1.98
|
Ivan, а чо там?
Работает быстрее, от нагрузок лучше защищен, настраивается легко, все всевозможные и невозможные модули и адаптеры для него уже давно написаны
|
|
|
|
|
Записан
|
|
|
|
|