Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django serving media files (user uploaded files ) in openshift

I have successfully deployed my Django project in openshift. But I need to be able to serve files that are uploaded by users. I user MEDIA_ROOT and MEDIA_URL for that. I followed this tutorial here, but nothing happened. I had to change MEDIA_ROOT because the one suggested there isn't correct i think. So my MEDIA_ROOT looks like

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

I added the .htaccess in /wsgi folder with as it says in the article

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

and created the build script to make symbolic link of the media in static as the article says.

#!/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

In my urls.py I have added the

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

but I still can't serve them. I also tried not to include the django static method in urls.py but the same result.

In another tutorial .htacces is placed inside static folder. Am I doing something wrong?

like image 336
Apostolos Avatar asked May 22 '14 13:05

Apostolos


2 Answers

Just for others to know, I solved my problem by correcting the RewriteRule adding media folder to the second part of the rule, so it became

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

Hope it helps others.

like image 125
Apostolos Avatar answered Oct 10 '22 17:10

Apostolos


The problem is your media url. The symlink is created at wsgi/static/media, then your MEDIA_URL need is MEDIA_URL = '/static/media/'

First step, on build script .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

Second step: In your settings:

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')
like image 40
Gregory Avatar answered Oct 10 '22 19:10

Gregory