2015-05-31 30 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)