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