2012-06-28 2 views
11

Мое довольно базовое приложение позволяет пользователям загружать аватары.После 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 

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

ответ

26

Причина этого в том, что Heroku ограничивает способ хранения данных на своих серверах. Назад в bamboo дней стека, storing any data was simply impossible без использования внешней услуги. Поскольку они ввели стек Cedar, things have changed a little bit, но сохранение постоянных данных по-прежнему невозможно.

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

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

+1

Спасибо за ответ. Поскольку содержимое базы данных остается, я уже установил сброс. И я ничего не мог найти об этом в документах Herokus «Начало работы». Можно подумать, что разработчикам хотелось бы, чтобы эта информация часто задавалась. Еще раз спасибо! –

+3

Ну, доступ к базе данных и файлам - это две разные вещи. Heroku должен поддерживать какое-то постоянное хранилище, или разработчикам было бы совершенно бесполезно быстро запускать функциональное приложение, поэтому они дают вам доступ к общему экземпляру postgreSQL, но это не относится к доступу к хранилищу файлов. – JeanMertz

1

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

1

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

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

Вы можете прочитать эту arcticle на сайте Heroku: Uploading Files to S3 in Ruby with Paperclip

+0

Для дальнейшего ознакомления с использованием AWS S3 на Heroku: [Использование AWS S3 для хранения статических активов и загрузки файлов] (https://devcenter.heroku.com/articles/s3) –

Смежные вопросы