2015-05-31 29 views
1

在当前在Heroku上运行的Django应用程序中,我注意到在s3上托管时,从ImageFields检索url需要花费很长时间。 该应用程序使用Django Rest Framework编写。当我尝试检索具有图像字段的对象列表时,响应太慢Heroku会引发超时错误。我认为这是因为boto在每次请求时必须从s3中为每个单独的ImageField检索url。 如何加速进程以防止这些超时错误?Django ImageField网址使用亚马逊s3时速度较慢

回答

1

您可以在模型中创建一个新字段,例如image_url

class YourModel(...): 
    image_url = models.CharField(...) 
    # other fields 

当图像上传/保存在第一时间,检索其URL和填充image_url字段此值。不过,您需要再次保存模型。

您可以稍后在需要时使用此值。

记过

这可能导致不必要的数据库查找。但是,如果你使用Memcached或类似的东西来缓存数据库,我不会担心。

+0

解决我的问题。谢谢 – matteok

0

解决方案之一由xyers提供。这是我用于我的项目的其他可能的解决方案。 你可以在你的Django项目settings.py文件定义MEDIA_URL变量:

MEDIA_URL = 'https://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME 

然后,当你需要访问的网址,你可以使用这个变量。例如,如果您有模型:

class MyModel(...): 
    image = FileField(...) 

然后你就可以得到该文件的网址如下:

mymodel = MyModel.objects.get(...) 
image_url = os.path.join(settings.MEDIA_URL, mymodel.image.name)