Я искал много, но у меня все еще есть проблема со статическими файлами (CSS, изображение...) с моим django веб-сайтом.
Я использую mod_wsgi с апачем на archlinux 64 битах
Я добавил его в своем http.conf:
LoadModule wsgi_module modules/mod_wsgi.so
WSGIDaemonProcess mart.localhost user=mart group=users processes=2 threads=25
WSGIProcessGroup mart.localhost
LogLevel debug
Alias /media /home/mart/programmation/python/django/martfiles/media/
Order allow,deny
Allow from all
WSGIScriptAlias / /srv/http/wsgi-scripts/django.wsgi
Я пытался использовать django.wsgi в своей домашней папке, но это не работает (permission denied to access /
) (странно это работает, если я использую сценарий тестирования, данный здесь),
все каталоги и содержание (апачская папка, wsgi-сценарий, martfiles) имеют разрешение 775 root:devusers
с группой devusers включая моего пользователя, http и корень
в моем шаблоне base.html я называю CSS этим путем:
и ошибка в /var/log/http/error.log
[Sat Jan 16 13:22:21 2010] [error] [client 127.0.0.1] (13)Permission denied: access to /media/css/style.css denied, referer: http://localhost/
[Sat Jan 16 13:22:21 2010] [info] mod_wsgi (pid=14783): Attach interpreter ''
/srv/http/wsgi-script/django.wsgi
/home/../martfiles/settings.py
спасибо
редактирование: Я точный, что мой django веб-сайт хорошо работает (кроме сессий, но я не думаю, что он связан), таким образом, я не уверен, что он связан с django.wsgi файлом (возможно, я неправ), но что уверено, - то, что я должен смочь использовать django.wsgi снаружи апачской папки
если я изменяю строку Alias /media /home/mart/programmation/python/django/martfiles/media/
с Alias /media /srv/http/media/
и дает правильные полномочия, это работает. Но я не хочу (и не был должен) помещать все мои медиа в апачскую папку
Недостаточно, чтобы только каталог "/home/mart/programmation/python/django/martfiles/media", содержащий статические файлы, был удобен для чтения и поиска. Пользователь, который работает с Apache, должен иметь доступ на чтение и потенциально осуществлять поиск, ко всем родительским каталогам Apache, вплоть до корневого каталога. Так как на многих системах домашними каталогами являются 'rwx------', это может запретить доступ Apache независимо от директив Deny/Allow в конфигурации Apache.
Предложите разместить где-нибудь проект Django и статические файлы вне вашей домашней учетной записи и ослабить разрешения файловой системы по мере необходимости.
Ваш файл django.wsgi
WSGIScriptAlias / /srv/http/wsgi-scripts/django.wsgi
находится за пределами <каталога>
, определенный:
<Directory /home/mart/programmation/python/django/martfiles/>
, попробуйте добавить это на httpd.conf
:
<Directory /srv/http/wsgi-scripts/>
Order allow,deny
Allow from all
</Directory>
или, поставьте файл django.wsgi
где-то внутри / home / mart / программирование / python / django / markfiles /
. Это должно работать.
Редактировать: Хорошо, вот пример httpd.conf, который работает на производственной машине:
<VirtualHost *:80>
# Admin email, Server Name (domain name) and any aliases
ServerAdmin testing@example.de
ServerName www.example.de
DocumentRoot /home/example/testing/parts/public
Alias /media /home/example/testing/parts/public/media
# WSGI Settings
WSGIDaemonProcess example user=example group=example threads=25
WSGIProcessGroup example
WSGIScriptAlias / /home/example/testing/parts/public/django.wsgi
<Directory "/home/example/testing/parts/public">
# Allow Apache to follow links
Options FollowSymLinks
# Turn on the ability to use .htaccess files
AllowOverride All
# Controls who can get stuff from this directory
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
так, если ваш DHANGO.WSGI определяется в месте, на который можно доступен на <каталог>
Директива, вы также можете Sudo SU HTTPD
, если это пользователь, который запускает Apache в вашей системе, и просто попробуйте прочитать файлы CSS, чтобы увидеть, может ли Apache действительно получить доступ к ним ...
Кажется, это то, что у меня есть для моего приложения, за исключением того, что я не видел директивы NameVirtualHost
в http.conf, которая нужна, если вы хотите настроить виртуальные серверы. Можно попробовать добавить NameVirtualHost *:80
перед определением виртуального хоста.