0

我在 .swf 下有 .swf 文件vendor/assets/images/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。

4

2 回答 2

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
于 2013-06-01T04:14:54.903 回答
2

在 rails 4 上,如果您正在访问的资产实际上可以被 sprockets 解析,那么所有资产助手(image_path等)asset_path似乎只返回一个带前缀的路径。 简而言之:它必须存在于预编译后的磁盘上的资产路径中。config.assets.prefix

因此,asset_path('swf/')将不起作用,因为它是一个目录而不是一个文件。

另外,我遇​​到了以下情况:rails < 4(而不是链轮)复制了原始图像(因此是 swf 文件)创建了同一文件的摘要版本。因为这个声音管理器仍然能够找到未消化的 swf 文件,即使我有config.assets.digest = true.
在 Rails 4 中,这些原始图像不再被复制,因为它们改变了一些预编译内部结构,这会导致 soundmanager 如果它想回退到 flash 就会抛出异常。

要正确修复此声音管理器,需要修补,就像 michelpm 建议的那样。
对于soundmanager-rails ,我开始着手修复,包括一个适当的 soundmanager 补丁,你可以在 github 上找到它。

于 2013-10-18T03:11:36.520 回答