Почему переключение на Apache приводит к поломке всех статических файлов в моем приложении Django?

Я переключаюсь с сервера разработки Django на Apache для производства. Для этого я установил modwsgi и указал в apache2.conf следующее.

# Run my django application.
WSGIScriptAlias / /home/david/registration/registration/wsgi.py
WSGIPythonPath /home/david/registration

<Directory /home/david/registration/registration>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

Когда я перезапускаю Apache, я обнаруживаю, что мое приложение загружается в моем браузере, но ни CSS, ни изображения не загружаются.

Раньше я использовал staticfiles для управления своими статическими файлами. У меня были такие настройки.

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = '/home/david/static/'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

Статические файлы раньше работали, но не больше. Почему переключение на Apache препятствует загрузке моих статических файлов?


person dangerChihuahua007    schedule 18.05.2012    source источник


Ответы (1)


Лучший вариант для работы с apache2 и wsgi и django — использовать новый файл в /etc/apache2/sites-enabled/mynewsite.apache (расширение не имеет значения)

Файл должен выглядеть так:

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName yourproject.com.co
    Alias /admin/media/ /path/to/your/admin/media/
    Alias /media/ /path/to/your/media/
    Alias /static/ /path/to/your/static/collected/files/

    <Directory /path/to/your/admin/media/>
        Order deny,allow
        Allow from all
    </Directory>

    <Directory /path/to/your/media/>
        Order deny,allow
        Allow from all
    </Directory>

    <Directory /path/to/your/static/collected/files/>
        Order deny,allow
        Allow from all
    </Directory>

    WSGIScriptReloading On
    WSGIDaemonProcess yourproject python-path=/path/of/packages/for/python # (this is because I use virtualenvwrapper)
    WSGIProcessGroup yourproject
    WSGIApplicationGroup yourproject
    WSGIPassAuthorization On

    WSGIScriptAlias / /path/to/your/yourproject.wsgi
    ErrorLog /var/log/apache2/yourproject-error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel debug

    CustomLog /var/log/apache2/yourproject-access.log combined

</VirtualHost>

Вам нужно сообщить apache, чтобы он обслуживал ваше приложение django, но также вам нужно сказать, что Apache обслуживает файлы.

person diegueus9    schedule 18.05.2012
comment
Спасибо! Я возюсь с этим прямо сейчас. По какой-то причине при перезапуске Apache я получаю странное предупреждение: [warn] NameVirtualHost *:80 has no VirtualHosts. - person dangerChihuahua007; 19.05.2012
comment
Если я прав, вы можете поставить домен вместо * в двух первых строках - person diegueus9; 19.05.2012
comment
Ах, спасибо, у меня еще нет домена, поэтому я попробую IP-адрес. - person dangerChihuahua007; 19.05.2012
comment
Вы можете указать любой домен, который хотите, и добавить его в /etc/hosts вместо того, чтобы указывать IP. - person diegueus9; 19.05.2012
comment
Благодарю вас! Это помогло. Интересно, почему звездочка не сработала. * абсолютно разрешено в документации Apache. - person dangerChihuahua007; 19.05.2012