在Rails 3.0.X中,我将我的flash文件存储在public / flash中。 Flash文件,例如:jwplayer,uploadify等。
随着3.1中新目录结构的引入(即app / assets /),flash文件是否仍然存储在public / flash中,还是应该在app / assets /中创建一个名为'flash'的新目录?
在Rails 3.0.X中,我将我的flash文件存储在public / flash中。 Flash文件,例如:jwplayer,uploadify等。
随着3.1中新目录结构的引入(即app / assets /),flash文件是否仍然存储在public / flash中,还是应该在app / assets /中创建一个名为'flash'的新目录?
如果是这样的话 .swf
文件,我不认为他们属于 app/assets
。资产文件夹允许为CoffeeScript和SCSS(或类似的js和css“编译器”)预先“编译”的应用程序资产文件。如果你正在编译 .as
文件到 .swf
作为部署或启动过程的一部分,我可以看到将它们放在资产文件夹中是有意义的。然而,这似乎是一个可怕的想法。
================= UPDATE =====================
我错了。资产文件夹用于提供Sprockets资产。只要您可以处理消化的资产路径,就应该使用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] %>',
// ...
});
希望有所帮助。
我想,这两个地方都有很好的论据。使用资产管道(将它们存储在/ app / assets下)有一个缺点,即不能从闪存中硬链接任何静态文件,因为你无法告诉生产中的文件名(Rails会将内容的哈希值添加到文件名中) )。您必须使用包含资源文件名的Rails生成flashvars或xml文件。
但是,如果使用资产管道,如果文件更改,每个文件将在其文件名中获得新的哈希值。您可以告诉浏览器永久缓存文件,因为一旦您引用已更改的文件,它将是浏览器的新内容(< - 文件名),它将从服务器加载更改的文件。缓存可以让您的网站更快地回访访问者。