12

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?

4

3 回答 3

9

只是为了让其他人知道,我通过更正 RewriteRule 将媒体文件夹添加到规则的第二部分来解决我的问题,所以它变成了

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

希望它可以帮助别人。

于 2014-05-23T12:54:00.160 回答
2

问题是您的媒体网址。符号链接是在 wsgi/static/media 中创建的,那么您的 MEDIA_URL 需要是 MEDIA_URL = '/static/media/'

第一步,在构建脚本 .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

第二步:在您的设置中:

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')
于 2015-06-04T16:53:08.893 回答
1

我遇到了同样的问题,但上面的 Apostolos 解决方案并没有解决问题:当我尝试访问http://<domain>/media/<file>它时仍然无法正常工作。

然而,它确实以另一种方式工作。如果我尝试访问同一个文件,就好像它是静态文件一样,http://<domain>/static/media/<file>那么它确实有效。即使没有使用 Gpzim98 的解决方法,也会发生这种情况。我认为原因很简单,现在可以通过符号链接访问媒体文件。换句话说,媒体文件不会被提供,但您现在可以假装它们是静态文件。

非常渴望了解正在发生的事情以及如何完全解决这个问题(如果可以的话)并能够直接通过 MEDIA_URL 提供媒体文件。

谢谢

于 2016-02-07T19:58:41.960 回答