Подтвердить что ты не робот

Нет постоянной файловой системы для Heroku?

Приложение, которое я сейчас размещаю на Heroku, позволяет пользователям отправлять фотографии. Вначале я думал о сохранении этих фотографий в файловой системе, поскольку их хранение в базе данных, по-видимому, является плохой практикой.

Однако, похоже, нет постоянной файловой системы на Heroku, только эфемерной. Это правда, и если да, то каковы мои варианты хранения фотографий и других файлов?

4b9b3361

Ответ 1

Это правда. Heroku позволяет создавать облачные приложения, но эти облачные приложения не являются "постоянными" - они являются экземплярами (или "слизнями" ), которые могут быть воспроизведены несколько раз на Amazon EC2 (поэтому масштабирование с Heroku так просто). Если вы хотите нажать новую версию своего приложения, то slug будет перекомпилирован, и любые файлы, которые вы сохранили в файловой системе в предыдущем экземпляре, будут потеряны.

Ваш лучший выбор (будь то Heroku или иначе) заключается в том, чтобы сохранить отправленные пользователем фотографии в CDN. Поскольку вы находитесь на Heroku, и Heroku использует AWS, я бы рекомендовал Amazon S3 с возможностью включения CloudFront.

Это выгодно не только потому, что оно распространяется по эхомерному "ограничению" Heroku, но также потому, что CDN намного быстрее и обеспечит лучший сервис для вашего веб-сервиса и опыта для ваших пользователей.

Ответ 2

В зависимости от технологии, которую вы используете, ваш лучший выбор, вероятно, приведет к потоку загрузок на S3 (служба хранения Amazon). Вы можете взаимодействовать с S3 с клиентской библиотекой, чтобы упростить отправку и извлечение файлов. Boto - это пример клиентской библиотеки для Python - они существуют для всех популярных языков.

Еще одна вещь, о которой нужно помнить, заключается в том, что файловые системы Heroku также не используются. Это означает, что вам нужно будет поместить файл на S3 с тем же приложением, что и с загрузкой (а не с рабочим процессом). Если можно, попробуйте загрузить загрузку в память, никогда не записывайте ее на диск и не отправляйте напрямую на S3. Это увеличит скорость ваших загрузок.

Поскольку Heroku размещен на AWS, потоки на S3 происходят с очень высокой скоростью. Помните об этом, когда вы развиваетесь локально.