2012-02-19 3 views
5

У меня есть файлы шаблонов, которые я хотел бы использовать в моем приложении rails. Мне было интересно, где (в каком каталоге), чтобы положить их дали два сценария:Где разместить частные документы для использования в Rails-приложениях?

  1. Они являются частными для моего приложения (только веб-мастер может удалить, изменить их)
  2. Они являются частными для моего приложения, но и они могут управляться админов (удаленные, модифицированный)
+0

вам нужно часть 1) файлы, которые будут использоваться в выходном контентной? – KobeJohn

ответ

7

Update после комментариев

Так как вы хотите, чтобы обслуживать файлы локально, просто положить их за пределами/public/folder и вне любого из/активов/папок, и вы должны быть хорошими. Вы можете прочитать больше о государственных и активов папки здесь: Section 2 How to use the Asset Pipeline Скажем:

/private/ 

Я считаю, Section 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 объясняет в this SO question. Тогда только ваше приложение сможет разрешить доступ к файлу.

Что касается 2), также доступны для Администраторов

Проблема только с использованием части 1) является то, что она открывает файлы в течение ограниченного периода времени, в течение которого я предполагаю, что они являются общедоступными. Поэтому, если вы хотите обойти это, я думаю, вам нужно принять решение от Павла Швед на самом деле в том же SO-вопросе выше.

В этом решении файлы предоставляются через маршрут/контроллер, который предоставляет двоичные данные файла, а не URL-адрес, указывающий на файл.

Комбинированный раствор

Прочитайте файл из S3 только с приложением, уполномоченным на это доступ (не открывая его публично). Затем передайте данные непосредственно через контроллер, который может разрешить кому угодно.

Предостережения

  • Предоставление двоичных данных непосредственно из контроллера, как он хотел убить производительность приложения, если он часто используется, но я никогда не пробовал.
  • Если вы можете найти более простой способ сделать часть 1), часть 2) будет по-прежнему работать с этим раствором
+0

спасибо за быстрый ответ. Мой вопрос касался локального каталога, а не внешнего места. –

+1

Я обновил ответ для локальных файлов. Это то, что вам нужно? – KobeJohn

+0

Конвейер активов - это механизм (Sprockets), используемый Rails для управления активами (изображениями, файлами javascript и файлами стилей), мой вопрос более простой - это обработка личных файлов шаблонов (документов) внутри приложения. Я имею в виду, где их правильно разместить, где лучше всего найти их в структуре каталогов rails? –

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