После git push heroku-загруженные файлы на Heroku теряются

мой довольно простое приложение позволяет пользователям загружать аватары.

приложение развертывается в Heroku с

$ git add .
$ git commit -m "description"
$ git checkout master
$ git merge my-cool-new-feature
$ git push heroku

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

# Ignore User generated files
/public/system/*

и удалил файлы из репозитория.

$ git rm -rf --cached public/system

но проблема не исчезла. Вы можете мне точку в правильном направлении?

3 ответов


причина в том, что Heroku ограничивает способ хранения данных на своих серверах. Назад в bamboo дней стека, хранить любые данные было просто невозможно без использования внешнего сервиса. Так как они представили Cedar стек все немного изменилось, но хранение постоянных данных по-прежнему невозможно.

Как вы обнаружили, каждый раз, когда вы нажимаете новое изменение в приложении Heroku (или каждый раз, когда приложение выключается и перезапускается после бездействия в течение x минут), ваше приложение воссоздается и все сохраненные данные теряются.

лучше всего вообще не использовать каталог / public и начать использовать внешнюю службу, например Amazon S3, Rackspace Cloud Files или Spideroack


ваши файлы будут потеряны при каждом развертывании. Мое предпочтительное решение - использовать скрепку и ведро Amazon. Скрепка будет хранить ваше изображение в ведре, чтобы на него можно было ссылаться по желанию из приложения.


Если ваше приложение должно получать файлы загруженные пользователями, вы должны убедиться, что эти закачки хранятся в Центральном и прочное место.

с эфемерной файловой системой Heroku любая информация, записанная в файловую систему dyno, будет потеряна при перезапуске dyno. Вместо этого Heroku рекомендует услуги поддержки. Для хранения файлов и носителей, простой сервис хранения Amazon (S3) является отличным решением.

возможно, вы захотите прочитать эту статью на Сайт на Heroku: загрузка файлов в S3 в Ruby с помощью скрепки