我在vendor/assets/images/swf/
下有.swf文件。我需要该文件夹的资产路径。
但是这个(.js.coffee.erb)
#= soundmanager2
$ ->
soundManager.setup
url: '<%= asset_path "swf/" %>'
呈现此(.js):
(function() {
var $ = jQuery;
$(function() {
return soundManager.setup({
url: '/swf/'
});
});
}).call(this);
我使用的是rails 4.0.0.rc1。我正处于开发模式。路径/assets/swf/soundmanager2.swf
返回200,而/swf/soundmanager2.swf
返回404.帮助器image_path
返回/images/swf/
,但/images/swf/soundmanager2.swf
也返回404。
答案 0 :(得分:2)
这不值得麻烦,因为您必须禁用摘要才能正确获取文件的名称。所以解决方案是修复库。在Sound Manager 2的情况下,我这样做了:
我需要的一些CoffeeScript:
#= require soundmanager2
jQuery ->
soundManager.swfNames =
"/soundmanager2.swf": "<%= asset_path('swf/soundmanager2.swf') %>"
"/soundmanager2_debug.swf": "<%= asset_path('swf/soundmanager2_debug.swf') %>"
"/soundmanager2_flash9.swf": "<%= asset_path('swf/soundmanager2_flash9.swf') %>"
"/soundmanager2_flash9_debug.swf": "<%= asset_path('swf/soundmanager2_flash9_debug.swf') %>"
soundManager.setup
debugMode: <% if Rails.env.development? %>true<% else %>false<% end %>
url: '/'
在我的soundmanager2.js副本(V2.97a.20130512)中,在normalizeMovieURL
的定义中:
url = ... // After url is set
url = sm2.swfNames[url]; // Workaround
答案 1 :(得分:2)
on rails 4所有资产助手(image_path
,asset_path
等)似乎只返回config.assets.prefix
- 前缀路径,如果您正在访问的资产实际上是可解析的链轮。
简单地说:它在预编译后必须存在于磁盘上的资产路径中。
因此,asset_path('swf/')
将不起作用,因为它是目录而不是文件。
另外,我经历了以下几点:rails&lt; 4(链轮,而不是)复制原始图像(以及swf文件)和创建了同一文件的消化版本。因为这个soundmanager仍然能够找到未消化的swf文件,即使我有config.assets.digest = true
。
使用rails 4,这些原始图像不再被复制了,因为they changed some precompile internals导致声音管理员如果想要回退到闪光灯那么就会被甩掉。
正确修复此声音管理器需要修补,就像michelpm建议的那样 对于soundmanager-rails我开始处理修复工作,其中包括适用于soundmanager的补丁,您可以找到over on github。