图像无法使用django-zinnia博客在heroku应用程序中上传

时间:2014-09-26 13:44:53

标签: python django heroku django-admin zinnia

我正在使用zinnia在django中实现一个博客应用程序。博客完全在本地服务器上运行,但在heroku中部署时,图像不会被上传。

我的设置文件是这样的,

DEBUG = False
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, '..', 'static'),
)

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, '..', 'media')
ZINNIA_UPLOAD_TO = 'media/uploads/zinnia'

2 个答案:

答案 0 :(得分:3)

在Heroku的服务器上存储静态/媒体文件是有问题的,不鼓励。有解决方法,但使用替代方法来托管这些更容易。另外,当dyno重新播放时,Heroku上的文件将被删除。

最常用的解决方案是使用Web服务存储文件。在我自己尝试直接在Heroku的服务器(包括Zinnia)上收集静态和媒体文件时,图像会显示为已损坏/缺失的链接。由于Zinnia的图像文件是通过collectstatic(每次推送到Heroku时运行)收集的,这是预期的行为。

为了便于使用和提高性能,您应该从其他来源(如AWS S3)提供静态文件,详见此处 - https://devcenter.heroku.com/articles/s3

请注意:Whitenoise library是直接从Heroku提供静态/媒体资源的绝佳方式。它快速,易于设置,而且非常稳定。当你期望有大量的文件存储时,它可能不是最好的,但对于一个相对较小的网站,它是豌豆和胡萝卜。

另见─ Serve static files on heroku using AWS S3 for django? http://agiliq.com/blog/2014/06/heroku-django-s3-for-serving-media-files/

答案 1 :(得分:3)

我需要亚马逊AWS长期执行此操作。但我最初的错误是我没有包含这一行

MEDIAFILES_DIRS = (MEDIA_ROOT)

包含此内容后,我可以上传图片。但每次推送到heroku后,这些图像都将丢失。

所以我必须使用Amazon ASW来存储图像,这样即使我推送到heroku之后我也可以查看媒体文件