2014-05-22 16 views
12

Ho installato con successo il mio progetto Django in openshift. Ma devo essere in grado di servire i file che vengono caricati dagli utenti. Io userò MEDIA_ROOT e MEDIA_URL per quello. Ho seguito il tutorial this qui, ma non è successo niente. Ho dovuto cambiare MEDIA_ROOT perché quello suggerito non è corretto, penso. Quindi il mio root_supporto assomigliaDjango che serve file multimediali (file caricati dall'utente) in openshift

MEDIA_ROOT = os.path.join(os.environ.get('OPENSHIFT_DATA_DIR', ''),'media') 
MEDIA_URL = '/media/' 

ho aggiunto il .htaccess nella cartella/WSGI con come si dice in questo articolo

RewriteEngine On 
RewriteRule ^application/media/(.+)$ /static/$1 [L]  

e ha creato lo script di build per fare link simbolico dei media in statica come dice l'articolo.

#!/bin/bash 
if [ ! -d $OPENSHIFT_DATA_DIR/media ]; then 
    mkdir $OPENSHIFT_DATA_DIR/media 
fi 

ln -sf $OPENSHIFT_DATA_DIR/media $OPENSHIFT_REPO_DIR/wsgi/static/media 

Nel mio urls.py ho aggiunto il

urlpatterns += static(settings.MEDIA_ROOT, document_root=settings.MEDIA_URL) 

ma ancora non riesco a servire. Ho anche provato a non includere il metodo statico django in urls.py ma lo stesso risultato.

Nella esercitazione another .htacces viene inserito nella cartella statica. Sto facendo qualcosa di sbagliato?

+0

in grado di risolvere il mio problema ancora ... Anche se è chiaramente descritto che funziona ... – Apostolos

+0

Qual è l'obiettivo? Se si desidera ricevere i file multimediali da Apache, non utilizzare urlpatterns (principalmente nella produzione). Nell'altro caso non si dovrebbero usare riscritture e symlink (principalmente per lo sviluppo). – tomako

+0

Piccola nota. Sul tuo URL hai urlpatterns + = static (settings.MEDIA_ROOT, document_root = settings.MEDIA_URL) ma dovrebbe essere urlpatterns + = statici (settings.MEDIA_URL, document_root = settings.MEDIA_ROOT) Gli argomenti sono in ordine inverso –

risposta

8

Solo per gli altri a conoscere, ho risolto il mio problema correggendo la RewriteRule aggiungendo cartella multimediale per la seconda parte della regola, così è diventato

RewriteEngine On 
RewriteRule ^application/media/(.+)$ /static/media/$1 [L] 

Speranza che aiuta gli altri.

+0

È possibile controllare la propria risposta accettata! –

2

Il problema è il tuo URL multimediale. Il link simbolico viene creato WSGI/static/media, allora il vostro bisogno MEDIA_URL è MEDIA_URL = '/ static/media /'

Primo passo, lo script di build .openshift/action_hooks/build:

if [ ! -d $OPENSHIFT_DATA_DIR/media ]; then mkdir $OPENSHIFT_DATA_DIR/media fi 

ln -sf $OPENSHIFT_DATA_DIR/media $OPENSHIFT_REPO_DIR/wsgi/static/media 

Seconda passo: Nelle impostazioni:

MEDIA_URL = '/static/media/' 

if ON_PAAS: 
    MEDIA_ROOT = os.path.join(os.environ.get('OPENSHIFT_DATA_DIR'), 'media') 
else: 
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
1

ho avuto lo stesso problema, ma la soluzione Apostolos' di cui sopra non ha risolto il problema: quando provo ad accedere http://<domain>/media/<file> ancora non funziona.

Tuttavia funziona in un altro modo. se provo ad accedere allo stesso file come se fosse statico usando http://<domain>/static/media/<file>, allora funziona. Questo accade anche senza utilizzare la soluzione alternativa di Gpzim98. Penso che la ragione sia semplicemente che i file multimediali sono ora accessibili attraverso il collegamento simbolico. In altre parole, i file multimediali non vengono forniti, ma ora puoi fingere di essere file statici.

Sarebbe molto utile capire cosa sta succedendo e come risolvere completamente questo problema (se possibile) ed essere in grado di servire i file multimediali direttamente tramite MEDIA_URL.

Grazie

non