делается это созданием каталога на сервере, который лежит отдельно от приложения и при каждом деплое симлинкается в public каталог
подробнее:
если файлы заливают пользователи, то загружать их можно гемами paperclip или carrierwave
оба гема будут заливать файлы куда-то, например в каталог public/screenshots
этот каталог вам нужно будет засунуть в .gitignore, чтобы он не попал в репозиторий
приложение вы деплоите, надеюсь, через capistrano
на продакшен сервере в каталоге, куда будет идти деплой, в shared каталоге нужно будет создать ваш каталог
и задать в конфиге капистрано, чтобы капистрано делал симлинк из #{shared_path}/screenshots в #{release_path}/screenshots
пример куска конфига для capistrano 3:
take.ms/NwlI9
надо задать лишь имена файлов и каталогов, а капистрано затем всё сделает сам