2011-01-15 14 views
0

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?

+0

Wenn das Öffnen der Datei fehlschlägt, welchen Fehler bekommen Sie? – Spacedman

+0

Der Requester erhält einen Fehler von 500, genau wie beim Aufruf von makedirs(). – Joel

+1

Alles in den Apache-Fehlerprotokollen? Es sollte irgendwo eine Python-Ausnahme passieren. Woher weißt du, dass die geöffnete Datei fehlschlägt? – Spacedman

Antwort

0

Hinterläßt os.path.join immer einen Schrägstrich auf file_path? Wenn nicht, dann hat Ihr open (file_path + file_name) keinen zwischen ihnen. Versuchen Sie os.path.join auf ihnen.

Keine Ahnung, warum es mir von Ihrem Entwicklungsserver obwohl sein würde ...

+0

Ah, guter Punkt. Das war nur ein Copy-Paste + Bearbeitung für das Posting-Problem. Ich habe den ursprünglichen Beitrag bearbeitet, um die Änderung widerzuspiegeln. – Joel

+0

Sie sollten immer noch os.path.join verwenden, falls der Pfad einen Schrägstrich hat, und somit zwei Schrägstriche in Ihrem letzten vollständigen Pfad erhalten. Wenn man den Pfad + "/" + Name sieht, kann ich zucken! – Spacedman

+0

Einverstanden, aber ich habe das Gamut ausprobiert und nichts funktioniert. – Joel

0

sieht aus wie die Apache-Threads keinen Zugriff auf die Dateien haben, weil sie unter einem Benutzer (www-data) hervorgebracht wurden, die wasn‘ t Teil der Gruppe, der die Verzeichnisse gehören. Hoffentlich kann dies jemandem helfen, Zeit zu sparen.

Verwandte Themen