0

我正在使用 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'
4

2 回答 2

3

在 Heroku 的服务器上存储静态/媒体文件是有问题且不鼓励的。有一些变通方法,但使用替代方法来托管这些更容易。另外,当重新旋转测功机时,Heroku 上的文件将被删除。

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

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

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

另请参阅 - 使用 AWS S3 for django 在 heroku 上提供静态文件? http://agiliq.com/blog/2014/06/heroku-django-s3-for-serving-media-files/

于 2014-09-26T22:22:28.143 回答
3

我需要亚马逊 AWS 来长期做这件事。但我最初的错误是我没有包括这一行

MEDIAFILES_DIRS = (MEDIA_ROOT)

包括这个之后,我可以上传图片。但是在每次推送到 heroku 之后,这些图像都会丢失。

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

于 2014-10-01T11:19:01.593 回答