我已经在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放在静态文件夹中。我做错了吗?
答案 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提供媒体文件。
由于