Сервер Apache не может найти статические файлы в проекте Django

Я пытаюсь загрузить свой код на сервер Apache с помощью mod_python. Я много пробовал, но сервер не может получить доступ к моим статическим файлам (всем моим изображениям, js и css). Вот мои настройки Virtualhost:

<VirtualHost *:80>
ServerName mysite.com
ServerAlias www.mysite.com
Alias /static/ /home/mysite/products/static/
#
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.mysite\.com
RewriteRule (.*) http://mysite.com$1 [R=301,L] 
#
DocumentRoot /home
<Directory /home/mysite/>
    SetHandler mod_python
    PythonHandler mod_python.publisher
    PythonDebug On
</Directory>
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog /var/log/apache2/error.log

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

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

</VirtualHost>

мой журнал доступа:

"GET /giftproducts/static/js/top.js HTTP/1.1" 404 1487 "http://xxx.xxx.xx.xxx/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"
xxx.xxx.xx.xxx - - [23/Apr/2013:15:09:52 -0500] "GET /giftproducts/static/css/index.css HTTP/1.1" 404 1486 "http://xxx.xxx.xx.xxx/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"

(404-я страница не найдена - ПОЧЕМУ !?)

settings.py:

import os
import sys
path = os.path.abspath(os.path.join(os.path.dirname(__file__)))
MEDIA_ROOT = path + '/products/media/'
MEDIA_URL = '/media/'

PROJECT_ROOT = path
STATIC_ROOT = path + '/products/static/'
STATIC_URL = '/products/static/'

STATICFILES_DIRS = (
    path,

)

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
TEMPLATE_DIRS = (
path + '/products/templates',
) #this works, since it is loading the html

пытался указать пути вроде "/ static / x" и "{{STATIC_URL}} x", но ничего не работает.

Любая помощь по этому поводу была бы замечательной. Спасибо.

ОБНОВЛЕНИЕ: в дополнение к тому, что Глин предложил ниже, я добавил эти строки в свой urls.py, и тогда это сработало.

if settings.DEBUG:
urlpatterns += patterns('',
 (r'^static/(?P<path>.*)$', 'django.views.static.serve',         
 {'document_root': settings.STATIC_ROOT}),
)

person user_2000    schedule 23.04.2013    source источник
comment
Рекомендуемый способ запустить приложение Django в производство - использовать mod_wsgi, как сказано в: docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi Вы должны попробовать именно так   -  person Paulo Bu    schedule 24.04.2013
comment
спасибо, у меня он работает с mod_python, но не могли бы вы рассказать мне, почему рекомендуется mod_wsgi (согласно вашему опыту), не хотите запускать проблемы с mod_python позже   -  person user_2000    schedule 24.04.2013
comment
mod_python сейчас вроде как мертв. Если вы начинаете что-то новое, используйте mod_wsgi, также рекомендуется Django.   -  person Glyn Jackson    schedule 24.04.2013
comment
Вот в чем причина. Кроме того, в последней самой последней документации Django используется и рекомендуется mod_wsgi, и лучше использовать это, а не взаимодействовать с каким-то старым неподдерживаемым модулем.   -  person Paulo Bu    schedule 24.04.2013


Ответы (1)


1) Правильно ли вы настроили статические файлы на виртуальном хосте? Я их не вижу ...

i.e.

    Alias /media/ /products/static
    Alias /static/ /products/static


    <Directory /products/static>
        Order allow,deny
        Allow from all
    </Directory>

2) В ваших шаблонах всегда используйте {{ STATIC_URL }} для извлечения статических файлов, это лучшая практика.

3) Добавьте django.contrib.staticfiles и запустите collectstatic команду управления < / а>

person Glyn Jackson    schedule 23.04.2013
comment
Большое спасибо за ответ. Я пробовал кое-что, и теперь все работает нормально. Вот что я сделал, а что нет: 1. добавил псевдоним, который вы упомянули, а также часть каталога 2. добавил это в мой urls.py (я думаю, это то, что на самом деле заставило его работать) if settings.DEBUG: urlpatterns + = patterns ( '', (r '^ static / (? P ‹path›. *) $', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),) 3. не запускался collectstatic , и я указываю путь как / static / x вместо {{STATIC_URL}} x, действительно ли мне нужно это делать, поскольку он не работает с {{STATIC_URL}} - person user_2000; 24.04.2013
comment
@ user_2000 Я рад, что у вас все заработало. Если мой ответ поможет, примите, пожалуйста. Еще одно примечание: {{STATIC_URL}} x и / static / x 'должны' совпадать при просмотре вывода. Если это не так, проверьте свои статические пути. Я всегда рекомендую использовать {{STATIC_URL}} вместо жестко запрограммированного, это избавит вас от многих проблем в долгосрочной перспективе! - person Glyn Jackson; 24.04.2013