eine Django-Website auf einem Produktions Linux-Server mit Apache mit mod_python bringen, ich bin mit dem folgenden Code für eine Datei-Upload:Warum erstellt Django keine Verzeichnisse und Dateien auf dem Produktionsserver?
from django.conf import settings
import os
# ...
upload_base_dir = "upload"
file_pointer = files['file']
file_path = os.path.join(settings.ROOT_SITE_DIR, upload_base_dir, event_name)
if not os.path.exists(file_path):
os.makedirs(file_path)
file = open(file_path + '/' + file_name, 'wb+')
for chunk in file_pointer.chunks():
file.write(chunk)
file.close()
Der file_path ist ein absoluter Pfad zur Datei. Ich habe ein wenig Debugging durchgeführt, um festzustellen, dass os.makedirs() fehlschlägt, wenn der Dateipfad nicht existiert (Fehler 500 wird an den Anforderer zurückgegeben). Wenn der Dateipfad existiert, schlägt das Öffnen der Datei fehl. Ich habe sichergestellt, dass Verzeichnisberechtigungen freizügig genug sind.
Der Code funktioniert, wenn ich den Django-Entwicklungsserver betreibe. Ich habe diesen Code zuvor verwendet und funktioniert auf anderen Websites. Ich bin mir ziemlich sicher, dass die Apache-Konfiguration für relevante Einstellungen gleich ist.
Sollte eine einfache Lösung sein, so macht mich das verrückt. Hat jemand Hinweise auf andere Dinge, die ich überprüfen sollte? Kann ich Apache als Teil des Problems ausschließen?
Wenn das Öffnen der Datei fehlschlägt, welchen Fehler bekommen Sie? – Spacedman
Der Requester erhält einen Fehler von 500, genau wie beim Aufruf von makedirs(). – Joel
Alles in den Apache-Fehlerprotokollen? Es sollte irgendwo eine Python-Ausnahme passieren. Woher weißt du, dass die geöffnete Datei fehlschlägt? – Spacedman