Also habe ich endlich einen Workaround gefunden.
Um meine Dateien auf 2 verschiedenen Ordnern (statisch und Uploads) in der Lage sein in meinem S3 Eimer dies habe ich in meiner settings.py
Datei hochladen:
STATICFILES_STORAGE = 'myapp.s3utils.StaticRootS3BotoStorage'
DEFAULT_FILE_STORAGE = 'myapp.s3utils.MediaRootS3BotoStorage'
Und dies in der myapp.s3utils.py
Datei:
from storages.backends.s3boto import S3BotoStorage
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='uploads')
Aber ich konnte Djangos Cache-Busting nicht benutzen. Die Lösung wurde auf meine myapp.s3utils.py
Datei ändern:
from storages.backends.s3boto import S3BotoStorage
from django.contrib.staticfiles.storage import ManifestFilesMixin
class CustomS3Storage(ManifestFilesMixin, S3BotoStorage):
pass
StaticRootS3BotoStorage = lambda: CustomS3Storage(location='static')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='uploads')
Im Grunde ist es fügt die ManiFestfilesMixin, die Sie Cache-Busting verwenden können.
Als eine Randnotiz können Sie sehen, dass ich nur Cache-Busting für die statischen Dateien, aber nicht für die Upload-Dateien verwenden. Deshalb ruft die MediaRootS3BotoStorage die S3BotoStorage Klasse anstelle der CustomS3Storage. Ich mache es so, weil die Upload-Dateien nicht in meinem Server gespeichert sind (die statischen Dateien sind), sie sind direkt in der S3-Bucket gespeichert, also wenn ich die Collectstatic lief sie nicht auf meinem Server, also ich don Ich muss den Namen den Hash hinzufügen.
Wow, das spart meinen Tag !! Ich habe damit für ein paar Stunden ohne Erfolg gehandelt. Ich verstehe nicht, warum diese Antwort nicht mehr positive Stimmen hat. Diese einfache Änderung an der s3utils.py funktioniert wie ein Charme für mich :) Danke Kumpel !!! – rdiaz82
Wo wird 'staticfiles.json' in diesem Fall gespeichert, in S3 oder im lokalen Dateisystem? Und wird es bei jeder Anfrage gelesen? – Flimm
Um meine Frage zu beantworten, scheint 'staticfiles.json' in S3 öffentlich sichtbar zu sein und wird nicht bei jeder Anfrage gelesen. – Flimm