После 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 с помощью скрепки