Обновление после комментариев
Поскольку вы хотите обслуживать файлы локально, просто поместите их вне папки / public / и вне любой из /активы / папки, и вы должны быть хорошими.Подробнее о папках public и assets можно прочитать здесь: Раздел 2 Как использовать конвейер активов Скажем так:
/private/
Полагаю Раздел11 send_file , также используемый в вопросе SO, связанном с моим первоначальным ответом ниже, по-прежнему является способом предоставления доступа к файлам через контроллер, а не статически.Адаптировано из документов:
send_file("#{Rails.root}/private/#{filename}",
:filename => "#{filename}",
:type => "application/pdf", #for example if pdf
:disposition => 'inline') #send inline instead of attachment
Оригинальный ответ для удаленного обслуживания вместе с файлом send_file ниже
Относительно 1) файлов, приватных дляприложение Вы можете заблокировать эти личные файлы в системе, такой как Amazon S3, которая обеспечивает авторизованный доступ, как объясняет Callmeed в этот вопрос SO .Тогда только ваше приложение сможет авторизовать доступ к файлу.
Относительно 2) также доступно для администраторов
Проблема с использованием только части 1) заключается в том, что оноразблокирует файлы на ограниченный период времени, в течение которого я предполагаю, что они общедоступны.Так что, если вы хотите обойти это, я думаю, вам нужно взять решение от Павла Шведа в том же вопросе SO, приведенном выше.
В этом решении файлы предоставляются через маршрут / контроллер, который предоставляет двоичный файлданные файла вместо использования URL-адреса, указывающего на файл.
Комбинированное решение
Считайте файл из S3 только с вашим приложением, которому разрешено делать этот доступ (не открывая это публично).Затем предоставьте данные непосредственно через контроллер, который может авторизовать кого угодно.
Предостережения
- Предоставление двоичных данных непосредственно из контроллера может привести к снижению производительности.приложения, если оно используется часто, но я никогда не пробовал.
- Если вы можете найти более простой способ выполнить часть 1), часть 2) все равно будет работать с этим решением