Django在openshift中提供媒体文件(用户上传的文件)

时间:2014-05-22 13:16:50

标签: python django openshift django-media

我已经在openshift中成功部署了我的Django项目。但我需要能够提供用户上传的文件。我为此用户MEDIA_ROOT和MEDIA_URL。我在这里遵循了this教程,但没有任何反应。我不得不改变MEDIA_ROOT,因为我认为这是不正确的。所以我的MEDIA_ROOT看起来像

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

我在/ wsgi文件夹中添加了.htaccess,正如文章

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

并创建了构建脚本,以便在文章中提到静态媒体的符号链接。

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

在我的urls.py中,我添加了

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

但我仍然无法为他们服务。我也尝试不在urls.py中包含django静态方法,但结果相同。

another教程中.htacces放在静态文件夹中。我做错了吗?

3 个答案:

答案 0 :(得分:8)

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

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

希望它可以帮助他人。

答案 1 :(得分: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')

答案 2 :(得分:1)

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

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

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

由于