2015-05-31 2 views
1

В моем приложении Django, запущенном в настоящее время на Heroku, я заметил, что получение url из ImageFields ведется всегда на хостинге на s3. Приложение написано с использованием Django Rest Framework. Когда я пытаюсь получить список объектов, у которых есть поля изображений, ответ настолько медленный. Heroku выдает ошибку тайм-аута. Я предполагаю, что это потому, что boto должен получить URL-адрес от s3 для каждого отдельного ImageField по каждому запросу. Как ускорить процесс для предотвращения этих ошибок таймаута?Django ImageField url медленный при использовании Amazon s3

ответ

1

Вы можете создать новое поле в своих моделях, например image_url.

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

Когда изображение загружается/сохранен в первый раз, получить его URL и заполнить image_url поля с этим значением. Однако вам нужно будет сохранить свою модель.

Вы можете использовать это значение позже, когда это необходимо.

Demerits

Это может привести к ненужному доступу к БД. Если, однако, вы используете Memcached или что-то подобное для кэширования базы данных, я бы не стал беспокоиться.

+0

решить мою проблему. благодаря – matteok

0

Одно из решений было предоставлено xyers выше. Вот другое возможное решение, которое я использовал для своего проекта. Вы можете определить переменную MEDIA_URL в файле settings.py вашего проекта Джанго:

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

Затем вы можете использовать эту переменную, когда вам нужно получить доступ к URL-адресу. Например, если у вас есть модель:

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

Тогда вы можете получить URL этого файла следующим образом:

mymodel = MyModel.objects.get(...) 
image_url = os.path.join(settings.MEDIA_URL, mymodel.image.name) 
Смежные вопросы