Где должны храниться flash-файлы в 3.1?

#ruby-on-rails #flash #ruby-on-rails-3

#ruby-on-rails #flash #ruby-on-rails-3

Вопрос:

В Rails 3.0.X я бы хранил свои файлы flash в public / flash. Файлы Flash, такие как: jwplayer, uploadify и т.д.

С введением новой структуры каталогов в 3.1 (т. Е. app / assets /), должны ли файлы flash по-прежнему храниться в общедоступном / flash, или мне следует создать новый каталог под названием «flash» в app / assets /?

Комментарии:

1. Я еще не начинал играть с 3.1, но я был бы шокирован, если бы что-либо в app / assets можно было предоставлять публично — это не имело бы смысла ни с точки зрения безопасности, ни с точки зрения соблюдения соглашения об общедоступном каталоге. Поскольку вам нужно, чтобы эти flash-файлы были общедоступными, вы должны хранить их публично.

2. Исходя из этого понимания. Как насчет изображений приложений? Если изображения, такие как логотип, баннер, основной фон, иконки, считаются общедоступными, почему в app / assets существует каталог изображений? Или мы все равно должны размещать эти типы изображений в public / images. Если да, то для чего используется каталог изображений в app / assets?

3. @JeremyWeathers: Конвейер ресурсов предназначен для сокрытия частного содержимого. Это для предварительной компиляции ресурсов и очистки кэша.

4. Я хотел написать: Конвейер ресурсов НЕ предназначен для сокрытия частного содержимого.

Ответ №1:

Вы можете использовать директиву provide Sprockets.

Например, вот как я использую Plupload:

 # app/assets/javascripts/plupload.js
//= require plupload/plupload
//= require plupload/plupload.flash
//= require plupload/plupload.silverlight
//= provide plupload/dependencies
  

Соответствующий каталог поставщика организован следующим образом:

 vendor
├── assets
│   ├── javascripts
│   │   └── plupload
│   │       ├── dependencies
│   │       │   ├── plupload.flash.swf
│   │       │   └── plupload.silverlight.xap
│   │       ├── plupload.flash.js
│   │       ├── plupload.js
│   │       └── plupload.silverlight.js
│   └── stylesheets
└── plugins
  

Затем я использую, <%= javascript_include_tag 'plupload' %> когда хочу использовать Plupload, и использую asset_path помощник для заполнения конфигурации Plupload:

 <%= javascript_include_tag 'plupload' %>

<script type="text/javascript">
$(function() {
    var uploader = new plupload.Uploader({
        runtimes : 'flash,silverlight',
        multipart : true,
        multipart_params : {
            'authenticity_token' : '<%= form_authenticity_token %>'
        },
        flash_swf_url : 
            '<%= asset_path "plupload/dependencies/plupload.flash.swf" %>',
        silverlight_xap_url :
            '<%= asset_path "plupload/dependencies/plupload.silverlight.xap" %>',
        url : '<%= url_for [@item, :photos] %>',
        // ...
    });
  

Надеюсь, это поможет.

Ответ №2:

если это .swf файлы, я не думаю, что им место в app/assets . Папка asset позволяет размещать предварительно «скомпилированные» файлы ресурсов приложения для CoffeeScript и SCSS (или аналогичных «компиляторов» js и css). Если вы компилируете .as файлы в .swf files как часть процесса развертывания или запуска, я мог бы увидеть смысл поместить их в папку asset. Однако это кажется ужасной идеей.

================= ОБНОВИТЬ=====================

Я был неправ. Папка asset предназначена для обслуживания ресурсов Sprockets. Пока вы можете обрабатывать обработанные пути к ресурсам, вы должны использовать Sprockets.

Комментарии:

1. Если они предназначены для предварительно «скомпилированных» файлов ресурсов приложения, почему там есть каталог images в app / assets?

2. Кристиан, у нас в приложении есть изображения, которые включены только в PDF-файлы, созданные приложением. Имеет смысл хранить их в приложении / ресурсах, а не общедоступно.

3. Я не согласен. Это не только для предварительно скомпилированных ресурсов. Если вы используете конвейер ресурсов Rails, вы получите выгоду от его функции очистки кэша и попросите браузер кэшировать их навсегда. Вот почему изображениям также есть место в ресурсах. Но вы не можете использовать жестко закодированные пути. Если вы позаботитесь об этом (например, сообщите flash все пути через сгенерированные rails flash vars или xml-файлы), вы сможете извлечь из этого большую пользу.

4. На самом деле я должен согласиться с iGEL. Теперь, используя Sprockets в течение более длительного периода, я бы сказал, что если вы можете обрабатывать «переработанные» пути, вам следует поместить свои swf-файлы в каталог assets..

Ответ №3:

Я думаю, есть веские аргументы в пользу обоих мест. Использование конвейера ресурсов (храните их в / app /assets) имеет недостаток, заключающийся в том, что невозможно жестко связать какие-либо статические файлы с flash, поскольку вы не можете указать имя файла в рабочей среде (Rails добавит хэш-сумму содержимого к имени файла). Вам нужно будет сгенерировать flashvars или XML-файлы с Rails, содержащие имена файлов ресурсов.

Однако, если вы используете конвейер ресурсов, каждый файл получит новую хэш-сумму в своем имени файла, если файл изменится. Вы можете указать браузеру кэшировать файлы навсегда, потому что, как только вы ссылаетесь на измененный файл, он будет новым для браузера (<- имя файла), и он загрузит измененный файл с сервера. Кэширование ускорит работу вашего сайта для постоянных посетителей.