Джанго StaticFiles APP и Wsgi
Это не так просто вопросы, как другие.. по крайней мере. это не проблема для настройки простого статического расположения файлов на основе одного каталога.
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... тогда вы бы все поняли.=)
Редактировать: любая информация о том, как WSGI может понять, где ему нужно искать статические файлы, кроме местоположения по умолчанию из настроек django, ДЕЙСТВИТЕЛЬНО приветствуется =)
3 ответа
Нет способа переопределения, как у django с WSGI.
в django есть замечательная команда manage.py collectstatic, которая помещает все файлы из списка STATIC_DIR (в settings.py) в основной статический каталог. На самом деле, эти команды просто копируют файлы из всех этих каталогов, и все! =)
Было бы здорово узнать, как я могу сделать это копирование автоматическим, когда любой файл в этом каталоге будет обновлен.. То же самое, что monitor.py для автоматической перезагрузки wsgi при изменении источника...
На официальном сайте 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
WSGI не имеет ничего общего с обслуживанием статических файлов. Все это четко описано в документации по развертыванию Django - как предполагает Торстен в комментариях, вам нужно будет указать Apache на ваши статические файлы, возможно, с помощью псевдонима.
Должен сказать, что этот проект выглядит очень хитроумно. Вручную добавление яиц к sys.path
это не правильный путь - гораздо лучше было бы использовать что-то вроде virtualenv, который управляет всем этим для вас.