Джанго StaticFiles APP и Wsgi - PullRequest
       14

Джанго StaticFiles APP и Wsgi

3 голосов
/ 07 апреля 2011

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

https://bitbucket.org/sirex/django-starter/src

Здесь есть такой интересный проект .. этот использует дистрибутив и сборку для созданияВесь проект и Django с модулями в одном реж.вы можете легко перейти с dev на рабочий режим и т. д. все, что вам нужно, это просто переименовать dir и набрать в нем «make», и все! =) там есть руководство ...

Ситуация, котораяработает с сервером Python и не работает с apache mod_wsgi: расположение статических файлов по умолчанию: "var / htdocs / static".Это можно переопределить с помощью одной статической директории, например apps / myapp / myapp / static /.Это работает с веб-сервером Python, но не работает с wsgi / apache.wsgi не может видеть ничего, кроме каталога по умолчанию .. пример: http://localhost:8000/static/css/main.css работает, но с Apache тот же URL не работает.и этот файл находится в myproject / apps / myapp / myapp / static / css / main.css, хотя статическим каталогом по умолчанию является var / htdocs / static =)

Насколько я понимаю, это переопределение сделано в приложении StaticFiles вsettings.py

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BUILDOUT_DIR, 'var', 'htdocs', 'static')
STATICFILES_DIRS = (
  os.path.join(BUILDOUT_DIR, 'project', 'static'), # <-- why "project" and not "apps" I don't know X_X
)

возможно, это неверно, я не знаю, но с py-сервером это работает.apache vhost работает с расположением по умолчанию .. и настроен на "var / htdocs / static".

Может быть, проблема в сценарии wsgi?

#!/usr/local/bin/python2.6

import os,sys
sys.path[0:0] = [
    '/usr/local/lib/python2.6/site-packages/',
    '/www/webapp/visimes/eggs/PIL-1.1.7-py2.6-freebsd-8.1-RELEASE-amd64.egg',
    '/www/webapp/visimes/eggs/South-0.7.3-py2.6.egg',
    '/www/webapp/visimes/eggs/django_annoying-0.7.6-py2.6.egg',
    '/www/webapp/visimes/eggs/coverage-3.4-py2.6-freebsd-8.1-RELEASE-amd64.egg',
    '/www/webapp/visimes/eggs/django_debug_toolbar-0.8.4-py2.6.egg',
    '/www/webapp/visimes/eggs/django_extensions-0.6-py2.6.egg',
    '/www/webapp/visimes/eggs/django_test_utils-0.3-py2.6.egg',
    '/www/webapp/visimes/eggs/ipdb-0.3-py2.6.egg',
    '/www/webapp/visimes/eggs/ipython-0.10.1-py2.6.egg',
    '/www/webapp/visimes/eggs/djangorecipe-0.21-py2.6.egg',
    '/www/webapp/visimes/eggs/zc.recipe.egg-1.3.2-py2.6.egg',
    '/www/webapp/visimes/eggs/zc.buildout-1.5.2-py2.6.egg',
    '/www/webapp/visimes/eggs/BeautifulSoup-3.2.0-py2.6.egg',
    '/www/webapp/visimes/eggs/setuptools-0.6c12dev_r88795-py2.6.egg',
    '/www/webapp/visimes/parts/django',
    '/www/webapp/visimes',
    '/www/webapp/visimes/project', # <-- this one need for monitor.py which i put in there
    '/www/webapp/visimes/apps/portal', # <-- startapp.sh script some how forgot to add this dir, it's my default app dir, which must be generated with startapp.sh and added in here..
    ]

import djangorecipe.wsgi

if __name__ == '__main__':
    djangorecipe.manage.main('project.development')

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.development'

import monitor
monitor.start(interval=1.0)

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Я добавил последние 4 строки самостоятельно.потому что я не смог запустить apache .. Я предполагаю, что djangorecipe.wsgi должен обрабатывать все остальное с помощью переопределения staticFile ... в любом случае, пожалуйста, проверьте этот пакет, если вы используете Linux или Mac, и попробуйте его самостоятельно.должно работать

пс.(кстати, bin / django нужно дублировать как bin / django.wsgi и т.д. / apache.conf генерируется vhost для apache)... тогда вы все поймете. =)

Редактировать: любая информация о том, как WSGI может понять, где ему нужно искать статические файлы, кроме местоположения по умолчанию из настроек django, ДЕЙСТВИТЕЛЬНО приветствуется =)

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

На официальном сайте mod_wsgi есть много документации для понимания того, как ее использовать. Это включает в себя, как настроить его для обслуживания статических медиа-файлов. См:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines

1 голос
/ 11 апреля 2011

Нет способа переопределения, как у django с WSGI ..

В django есть замечательная команда manage.py collectstatic, которая помещает все файлы из списка STATIC_DIR (в settings.py) в основной статический каталог. Фактически, эти команды просто копируют файлы из всех этих каталогов, и все тут =)

Было бы замечательно знать, как я могу сделать это копирование автоматическим, когда любой файл в этом каталоге будет обновлен .. То же самое, что monitor.py для автоматической перезагрузки wsgi при изменении источника ...

1 голос
/ 07 апреля 2011

WSGI не имеет ничего общего с обслуживанием статических файлов. Все это четко описано в документации по развертыванию Django - как предполагает Торстен в комментариях, вам нужно будет указать Apache на ваши статические файлы, возможно, с помощью псевдонима.

Должен сказать, что этот проект выглядит очень хитроумно. Вручную добавлять кучу яиц в sys.path - это не правильный путь - гораздо лучше было бы использовать что-то вроде virtualenv, который управляет всем этим для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...