web-dev-qa-db-fra.com

Apache ne servant pas Django fichiers statiques admin

Permettez-moi de vous remercier les gars de la communauté Stack Overflow de m'avoir aidé avec diverses erreurs Django et Apache (avec mod_wsgi). J'ai posé environ 5 questions connexes jusqu'à présent et je me rapproche maintenant et plus près de diffuser mon contenu sur un site de production!

Donc je sais qu'il y a beaucoup de questions similaires à ce sujet et j'ai lu un tassurquestionsà proposservicestatiquemédiafichiersactivéDjango .

Je lis à propos de STATIC_URL, STATIC_ROOT, le (bientôt obsolète) ADMIN_MEDIA_PREFIX, et en définissant un Alias /media/ ... dans la configuration Apache. J'ai essayé de tester chaque solution une par une, mais je n'ai rien réussi à faire.

Voici à quoi ressemble mon site d'administration en ce moment

J'ai également un cas étrange où n'importe quel le sous-domaine fonctionne sur mon serveur. Par exemple, j'essayais de configurer mon serveur pour que http://www.satoshi.example.com/ autorise mon contenu normal (non-Django), tandis que http://Django.satoshi.example.com/ permettrait à mon contenu Django d'être servi. Mais actuellement, tout sous-domaine, que ce soit satoshi.example.com ou blahblahasdas.satoshi.example.com, est servir mes Django fichiers (je sais parce que je peux aller dans le /admin page sur les deux sites, bien qu'ils soient dans des sessions différentes).

Quoi qu'il en soit, voici mes fichiers sur le serveur qui exécute CentOS (je ne sais pas quelle version), Apache 2.2.15, Python 2.6.6, Django 1.3.1, et mod_wsgi 3.2.

Je posterai ce que je pense être les fichiers et la configuration les plus pertinents ci-dessous:

Apache lance ces erreurs à chaque redémarrage

[Wed Feb 29 01:45:36 2012] [error] Exception KeyError: KeyError(140249420548064,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored
[Wed Feb 29 01:45:36 2012] [error] Exception KeyError: KeyError(140249420548064,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored
[Wed Feb 29 01:45:36 2012] [error] Exception KeyError: KeyError(140249420548064,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored
[Wed Feb 29 01:45:36 2012] [error] Exception KeyError: KeyError(140249420548064,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored
[Wed Feb 29 01:45:36 2012] [error] Exception KeyError: KeyError(140249420548064,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored
[Wed Feb 29 01:45:36 2012] [error] Exception KeyError: KeyError(140249420548064,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored
[Wed Feb 29 01:45:36 2012] [error] Exception KeyError: KeyError(140249420548064,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored
[Wed Feb 29 01:45:36 2012] [error] Exception KeyError: KeyError(140249420548064,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored
[Wed Feb 29 01:45:36 2012] [notice] SIGHUP received.  Attempting to restart
[Wed Feb 29 00:45:36 2012] [error] Exception KeyError: KeyError(140249420548064,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored
[Wed Feb 29 01:45:36 2012] [notice] Digest: generating secret for digest authentication ...
[Wed Feb 29 01:45:36 2012] [notice] Digest: done
[Wed Feb 29 01:45:36 2012] [warn] mod_wsgi: Compiled for Python/2.6.2.
[Wed Feb 29 01:45:36 2012] [warn] mod_wsgi: Runtime using Python/2.6.6.
[Wed Feb 29 01:45:36 2012] [notice] Apache/2.2.15 (Unix) mod_auth_pgsql/2.0.3 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips mod_wsgi/3.2 Python/2.6.6 mod_Perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations

Voici /var/www/html/mysite/Apache/apache_Django_wsgi.conf qui est chargé dans mon httpd.conf avec l'option NameVirtualHost *:80

<VirtualHost *:80>
    ServerName Django.satoshi.example.com
    ErrorLog "/var/log/httpd/Django_error_log"

    WSGIDaemonProcess Django
    WSGIProcessGroup Django

    Alias /media/ "/usr/lib/python2.6/site-packages/Django/contrib/admin/media"
    <Directory "/usr/lib/python2.6/site-packages/Django/contrib/admin/media">
        Order allow,deny
        Options Indexes
        Allow from all
        IndexOptions FancyIndexing
    </Directory>

    <Directory "/var/www/html/mysite">
        Order allow,deny
        Options Indexes
        Allow from all
        IndexOptions FancyIndexing
    </Directory>

    WSGIScriptAlias / "/var/www/html/mysite/Apache/Django.wsgi"

    <Directory "/var/www/html/mysite/Apache">
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

Voici /var/www/html/mysite/Apache/Django.wsgi

import os
import sys

paths = [
    '/var/www/html/mysite',
    '/var/www/html',
    '/usr/lib/python2.6/site-packages/',
]

for path in paths:
    if path not in sys.path:
        sys.path.append(path)

os.environ['Django_SETTINGS_MODULE'] = 'mysite.settings'

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

Et enfin voici une partie de /var/www/html/mysite/settings.py

# Absolute filesystem path to the directory that will hold user-uploaded files. 
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = ''

# 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/"
PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')

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

# URL prefix for admin static files -- CSS, JavaScript and images.
# Make sure to use a trailing slash.
# Examples: "http://foo.com/static/admin/", "/static/admin/".
ADMIN_MEDIA_PREFIX = '/static/admin/'

# Additional locations of static files
STATICFILES_DIRS = ( 
    # Put strings here, like "/home/html/static" or "C:/www/Django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of Finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = ( 
    'Django.contrib.staticfiles.finders.FileSystemFinder',
    'Django.contrib.staticfiles.finders.AppDirectoriesFinder',
#   'Django.contrib.staticfiles.finders.DefaultStorageFinder',
)

Faites-moi savoir si vous avez besoin d'autres fichiers. Merci d'avance!

43
hobbes3

Je pense que vous devriez changer:

Alias /media/ "/usr/lib/python2.6/site-packages/Django/contrib/admin/media"

à:

Alias /static/admin/ "/usr/lib/python2.6/site-packages/Django/contrib/admin/media"

Parce que vous avez:

ADMIN_MEDIA_PREFIX = '/static/admin/'
28
jpic

C'est parce que vous n'avez pas configuré vos fichiers STATIC ...

Ajouter aux paramètres:

STATIC_URL = '/static/'
STATIC_ROOT = '/var/www/static/'

Exécutez ensuite "python manage.py collectstatic"

Cela mettra tous les fichiers sous STATIC_ROOT que STATIC_URL servira ... Vous ne devriez pas pointer Apache vers vos fichiers lib Python lib !!

Si vous voulez également vos propres fichiers statiques spécifiques à l'application, configurez "STATICFILES_DIRS".

14
romemmy

J'ai obtenu une solution, j'ai regardé les fichiers access_log dans/var/log/httpd /

127.0.0.1 - - [28/Dec/2013:14:49:20 -0500] "GET /static/admin/css/login.css HTTP/1.1" 200 836 "http://127.0.0.1/admin/" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111109 CentOS/3.6.24-3.el6.centos Firefox/3.6.24"

j'ai donc ajouté les balises suivantes dans le fichier /etc/httpd/conf/httpd.conf,

Alias /static /usr/lib/python2.6/site-packages/Django/contrib/admin/static

à l'intérieur <VirtualHost 127.0.0.1:80> tag

puis j'ai redémarré le service en utilisant

service httpd restart

et ça Fonctionne !!!

2
Mahesh Shitole

Ce qui suit a fait l'affaire pour moi. (Django 1.11 avec Python 3.6)

Alias /static/admin /usr/local/lib/python3.6/site-packages/Django/contrib/admin/static/admin
<Directory "/usr/local/lib/python3.6/site-packages/Django/contrib/admin/static/admin">
    Require all granted
    Order allow,deny
    Allow from all
   # AllowOverride All
</Directory>

Alias /static /var/www/app/static

J'espère que cela aide.

0
Ashwin