asset_path返回文件夹的错误路径

时间:2013-05-27 18:40:48

标签: ruby-on-rails asset-pipeline sprockets soundmanager2

我在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。

2 个答案:

答案 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_pathasset_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