Ich versuche Heroku's documentation zu verwenden statische Dateien auf meinem lokalen Rechner und in der Produktion dienen. Wie auch immer, wenn ich meine App mit debug=True
starte, funktioniert alles wie erwartet; Statische Dateien werden abgerufen und die App wird wie beabsichtigt angezeigt. Jedoch, wenn ich debug=False
ändere, bekomme ich eine Server Error (500)
. Soweit ich das beurteilen kann, läuft alles auf meine STATICFILE_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
hinaus. Wenn ich dies kommentiere, läuft meine App mit debug=False
, aber ohne Styling aufgrund des Mangels an statischen Dateien. Ich bin durch die whitenoise documentation und heroku's gegangen, aber ich kann nicht herausfinden, was los ist, abgesehen von STATICFILE_STORAGE
ist das Problem. Ist Whitenoise nicht für die Produktion gedacht? Muss ich ein CDN in der Produktion verwenden? Es ist eine kleine Zeit-App, also habe ich gehofft, dass ich CDN nicht benutzen muss, aber wenn nötig.Django statische Dateien mit Whitenoise auf Heroku
settings.py (I enthalten nur die Teile, die ich settings.py relevant gedacht waren. Wenn Sie das Ganze benötigen, lassen Sie es mich wissen.)
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
MIDDLEWARE = [
'django_hosts.middleware.HostsRequestMiddleware',
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
.......
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'
# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, 'static'),
)
# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
wsgi.py
import os
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MySite.settings")
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
logs
2017-04-14T08:40:06.800390+00:00 heroku[router]: at=info method=GET path="/" host=wgsite.herokuapp.com request_id=6bf564f7-efba-42fb-b8b1-970a02a5283a fwd="5.51.58.217" dyno=web.1 connect=0ms service=11ms status=302 bytes=223 protocol=https
2017-04-14T08:40:06.997956+00:00 heroku[router]: at=info method=GET path="/login" host=wgsite.herokuapp.com request_id=4ce4486e-7e06-4fcd-a562-88ec3ffd8fa9 fwd="5.51.58.217" dyno=web.1 connect=0ms service=6ms status=302 bytes=243 protocol=https
Vielen Dank im Voraus für Ihre Hilfe!
UPDATE:
So stellt sich heraus, dass ich heroku config:unset DISABLE_COLLECTSTATIC
laufen mussten Heroku auf Auto collectstatic zu bekommen. Nun wirft seine mir diese Fehler:
remote: ! Error while running '$ python manage.py collectstatic --noinput'.
remote: See traceback above for details.
Welche ungerade ist, da ich lokal Python manage.py collectstatic mit Erfolg laufen kann ...
UPDATE # 2
ich collectstatic
lokal lief und Ein Verzeichnis mit dem Namen "staticfiles" wurde erstellt, wobei alle meine statischen Dateien von der App selbst organisiert wurden. Ich schob nach heroku und jetzt öffnet sich meine Seite mit allen statischen Dateien, die mit debug=False
funktionieren. Ich kann Heroku immer noch nicht dazu bringen, statische Daten automatisch zu erfassen, ohne dass es zu Fehlern kommt.
Was ist die vollständigen Fehler aus den Protokollen? –
Wenn Sie Whitenoise verwenden brauchen Sie keine CDN, ich benutze es ständig für meine statischen Dateien auf Heroku. Haben Sie Fehlerprotokollinformationen? – dentemm
Ich habe die Logs zur obigen Frage hinzugefügt. – grigs