在dyno跌倒睡眠之后找不到图像django heroku postgresql

时间:2015-03-10 16:38:15

标签: python django postgresql heroku django-admin

我有一个小型Django应用程序,在Heroku上部署了管理站点。每次dyno睡眠时,我之前在管理站点中预加载的所有媒体文件(图像)都会消失。我不确定图像是否正确存储在postgresql数据库中,或者它们是否存储在数据库中,只是存储在媒体位置。所有其余的都在工作,只是在dyno睡觉后没有找到的图像。我能做什么?这是我的代码:

models.py

from django.db import models

class Service(models.Model):
    title = models.CharField(max_length=40)
    description = models.TextField()
    enable = models.BooleanField(default=False)
    image = models.ImageField()

    def __str__(self):
        return self.title

    def __unicode__(self):
        return self.title

admin.py

from django.contrib import admin
from . import models

class ServiceAdmin(admin.ModelAdmin):
    list_display = ("title","enable")

    def image_img(self):
        if self.image:
            return u'<img src="%s" />' % self.image.url
        else:
            return '(No image found)'
    image_img.short_description = 'Thumb'
    image_img.allow_tags = True

admin.site.register(models.Service, ServiceAdmin)

settings.py

import os
import dj_database_url

PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))

POSTGRES_URL = "HEROKU_POSTGRESQL_<NAME>_URL"
DATABASES = {'default': dj_database_url.config(default=os.environ[POSTGRES_URL])}

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
MEDIA_URL = '/media/'

如果您还需要别的东西,请现在就让我吧。谢谢

1 个答案:

答案 0 :(得分:1)

在管理站点中创建图像时,您将它们保存到媒体目录中的Heroku dyno。您遇到的行为是预期的,因为Heroku使用ephemeral filesytem。 Dynos每24小时循环一次(可能在他们睡觉时),因此您在Heroku上直接创建或修改的任何文件都将被丢弃。您需要将上传的图像存储在某些具有持久性的地方,如Amazon S3。您还可以将图像添加到存储库,提交,并将其推送到heroku,只要您的slug大小保持在300 MB以下