Обновление после комментариев
Поскольку вы хотите локально обслуживать файлы, просто поместите их за пределы / public / folder и вне любого из / активов / папок и вы должны быть хорошими. Вы можете узнать больше об общих папках и папках активов здесь: Раздел 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 только с вашим приложением, разрешенным для этого доступа (не открывая его публично). Затем передайте данные непосредственно через контроллер, который может разрешить кому угодно.
Предостережения