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

В Rails 3.0.X я буду хранить свои флеш файлы в общедоступном /flash файле. Flash файлы, такие как: jwplayer, uploadify и т.д.

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

Ответ 1

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

================= UPDATE =====================

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

Ответ 2

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

Например, я использую 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] %>',
        // ...
    });

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

Ответ 3

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

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