2016-05-14 8 views
2

'heroku local' kann keine statischen Dateien finden, aber 'python manage.py runserver' findet die statischen Dateien ohne Fehler. Können Sie mir bitte helfen, dieses Problem zu beheben?heroku local statisch nicht gefunden

settings.py liest:

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) 
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') 
STATIC_URL = '/static/' 
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 

Ich betreibe collectstatic und die statischen Dateien werden auf STATIC_ROOT kopiert:

python manage.py collectstatic 

manage.py runserver‘findet die statischen Dateien ohne Probleme:

python manage.py runserver 

Während "Heroku local" eine Warnung "nicht gefunden" zurückgibt:

11:52:04 AM web.1 | [19/May/2016 10:52:04] WARNING [django.request:170] Not Found: /static/admin/css/base.css 
11:52:04 AM web.1 | [19/May/2016 10:52:04] WARNING [django.request:170] Not Found: /static/admin/css/base.css 
11:52:04 AM web.1 | [19/May/2016 10:52:04] WARNING [django.request:170] Not Found: /static/admin/css/login.css 
11:52:04 AM web.1 | [19/May/2016 10:52:04] WARNING [django.request:170] Not Found: /static/admin/css/login.css 

Nicht sicher, was hier passiert. Sowohl 'heroku local' als auch 'manage.py runserver' sollten die statischen Dateien anzeigen.

Hinweis: ich Django == 1.8.2 und settings.py bin mit enthält:

import os 
import dj_database_url 

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) 

SECRET_KEY = 'secretkey' 

DEBUG = True 

ALLOWED_HOSTS = [] 

INSTALLED_APPS = (
    # 'django.contrib.sites', 
    'django.contrib.admin', 
    'registration', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'dbbackup', 
    'listable', 
    'rest_framework', 
    'bootstrap3', 
    'django_crontab', 
) 

ACCOUNT_ACTIVATION_DAYS = 7 # One-week activation window; you may, of course, use a different value. 
REGISTRATION_AUTO_LOGIN = True # Automatically log the user in. 

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
) 

ROOT_URLCONF = 'track.urls' 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [os.path.join(BASE_DIR, 'templates')], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

WSGI_APPLICATION = 'track.wsgi.application' 

LANGUAGE_CODE = 'en-us' 
TIME_ZONE = 'UTC' 
USE_I18N = True 
USE_L10N = True 
USE_TZ = True 

FIXTURE_DIRS = (
    os.path.join(BASE_DIR, 'fixtures'), 
) 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = 'media/' 

REST_FRAMEWORK = { 
    # Use Django's standard `django.contrib.auth` permissions, 
    # or allow read-only access for unauthenticated users. 
    'DEFAULT_PERMISSION_CLASSES': [ 
     'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' 
    ], 
    'DEFAULT_PARSER_CLASSES': (
     'rest_framework_xml.parsers.XMLParser', 
    ), 
    'DEFAULT_RENDERER_CLASSES': (
     'rest_framework_xml.renderers.XMLRenderer', 
    ), 
} 

DATABASES = {'default' : dj_database_url.config(default='postgres://testuser:[email protected]:5432/testdb')} 

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'), 
) 

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 

BOOTSTRAP3 = { 
    'include_jquery': True, 
} 

Antwort

6

Die Lösung, die funktioniert für mich (nach 24 Stunden +):

1) installieren Sie die neueste stabile Version von Whitenoise (ich war von einem alten Beispiel arbeiten, die whitenoise erforderlich == 2.0.6)

2) stellen Sie sicher, Whitenoise zu MIDDLEWARE_CLASSES hinzufügen:

MIDDLEWARE_CLASSES = (
    'whitenoise.middleware.WhiteNoiseMiddleware', 
) 

Hinweis: hinzufügen von 'whitenoise.middleware.WhiteNoiseMiddleware' an die Middleware-Klasse, wenn 2.0.6 Whitenoise == verwendet wird einen Fehler werfen. Sie müssen auf die neueste stabile Version aktualisieren (derzeit whitenoise == 3.1)

+0

wollte nur sagen, riesig, vielen Dank! –

0

ich diese Admin-Dateien sind diejenigen aus der Django Admin-App zu übernehmen werde. Ohne zu sehen, Ihr Projekt, meine besten Tipps für, wo Sie als nächstes zu beheben sind:

1) Überprüfen Sie, dass django.contrib.admin in Ihrem INSTALLED_APPS ist.

2) Ändern Sie die DEFAULT_FILE_STORAGE Einstellung? Dies beeinträchtigt möglicherweise die STATICFILES_FINDERS.

3) Überprüfen Sie alle static files settings, wenn Sie eine von ihnen außer Kraft setzen, stellen Sie sicher, dass es keine Vorbehalte gibt.

Wenn Sie Ihre gesamte settings.py-Datei veröffentlichen, hätte ich eine viel bessere Chance, Ihr Problem zu debuggen.

+0

Vielen Dank @miketheredherring, ja die Admin-Dateien stammen aus der Django Admin-App. Ja, django.contrib.admin ist in INSTALLED_APPS enthalten. Ich habe DEFAULT_FILE_STORAGE nicht geändert. Ich habe den Inhalt von settings.py oben hinzugefügt. – Andrew