Я работал с двумя крупными игроками, когда дело доходит до загрузки файлов. несущая волна и скрепка .
Они обеспечивают хорошее решение для общей задачи с поддержкой различных альтернатив хранения. Оба поддерживают файловую систему и S3. Carrierwave также поддерживает Rackspace Cloud Files и GridFS MongoDB.
Я бы порекомендовал carrierwave из-за одного аспекта, в котором они разные. Он использует отдельный класс загрузки, который вы монтируете на своей модели. Это отделяет ваш код, связанный с загрузкой файла, от кода модели. Я считаю этот подход чище и проще для тестирования.