webentwicklung-frage-antwort-db.com.de

Apache liefert keine statischen Django admin-Dateien

Ich danke euch von der Stack Overflow-Community, dass ihr mir bei verschiedenen Django und Apache (mit mod_wsgi) -Fehlern geholfen habt. Ich habe bisher ungefähr 5 ähnliche Fragen gestellt und komme jetzt näher und näher dran, meine Inhalte auf eine Produktionsstätte zu bringen!

Ich weiß also, dass es viele ähnliche Fragen dazu gibt, und ich habe eine ReihevonFragenüberServierenStatischMedien gelesen. filesonDjango .

Ich habe etwas über STATIC_URL, STATIC_ROOT, Das (bald veraltete) ADMIN_MEDIA_PREFIX Und das Setzen eines Alias /media/ ... In der Apache-Konfiguration gelesen. Ich habe versucht, jede Lösung einzeln zu testen, aber ich konnte nichts zum Laufen bringen.

So sieht meine Admin-Site im Moment aus

Ich habe auch einen seltsamen Fall, in dem any Subdomain auf meinem Server funktioniert. Zum Beispiel habe ich versucht, meinen Server so einzurichten, dass http://www.satoshi.example.com/ meinen normalen (Nicht-Django) Inhalt zulässt, während http: //Django.satoshi. example.com/ würde erlauben, dass mein Django Inhalt geliefert wird. Derzeit wird jedoch jede Unterdomäne, egal ob satoshi.example.com oder blahblahasdas.satoshi.example.com, meine Django files (Ich weiß, weil ich auf beiden Seiten auf die Seite /admin Zugreifen kann, obwohl sie sich in verschiedenen Sessions befinden).

Wie auch immer, hier sind meine Dateien auf dem Server, auf dem CentOS ausgeführt wird (nicht sicher, welche Version), Apache 2.2.15, Python 2.6.6, Django 1.3.1 Und mod_wsgi 3.2.

Ich werde im Folgenden die meiner Meinung nach wichtigsten Dateien und Konfigurationen veröffentlichen:

Apache löst diese Fehler bei jedem Neustart aus

[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

Hier ist /var/www/html/mysite/Apache/apache_Django_wsgi.conf, Das mit der Option httpd.conf In meinen NameVirtualHost *:80 Geladen wird

<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>

Hier ist /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()

Und schließlich ist hier ein Teil von /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',
)

Lassen Sie mich wissen, wenn Sie andere Dateien benötigen. Danke im Voraus!

43
hobbes3

Ich denke, du solltest Folgendes ändern:

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

zu:

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

Weil du hast:

ADMIN_MEDIA_PREFIX = '/static/admin/'
28
jpic

Das liegt daran, dass Sie Ihre STATIC-Dateien nicht eingerichtet haben ...

Zu Einstellungen hinzufügen:

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

Führen Sie dann "python manage.py collectstatic" aus.

Damit werden alle Dateien unter STATIC_ROOT abgelegt, für die STATIC_URL verwendet wird ... Sie sollten Apache nicht auf Ihre Python lib-Dateien verweisen !!

Wenn Sie auch Ihre eigenen app-spezifischen statischen Dateien möchten, richten Sie "STATICFILES_DIRS" ein.

14
romemmy

Ich habe eine Lösung gefunden und mir die access_log-Dateien in/var/log/httpd/angesehen.

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"

deshalb habe ich folgende Tags in die Datei /etc/httpd/conf/httpd.conf eingefügt:

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

innerhalb <VirtualHost 127.0.0.1:80> Etikett

dann habe ich den Dienst mit neu gestartet

service httpd restart

und es Funktioniert !!!

2
Mahesh Shitole

Das Folgende hat den Trick für mich getan. (Django 1.11 mit 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

Ich hoffe es hilft.

0
Ashwin