2013-05-27 52 views
0

我有.swf文件在vendor/assets/images/swf/下。我需要該文件夾的資產路徑。asset_path返回錯誤的文件夾路徑

但這(.js.coffee.erb)

#= soundmanager2 

$ -> 
    soundManager.setup 
    url: '<%= asset_path "swf/" %>' 

被渲染這個(.js文件):

(function() { 
    var $ = jQuery; 
    $(function() { 
    return soundManager.setup({ 
     url: '/swf/' 
    }); 
    }); 
}).call(this); 

我使用的軌道4.0.0.rc1。我在開發模式。 /assets/swf/soundmanager2.swf返回200,而/swf/soundmanager2.swf回報404幫手image_path回報/images/swf/,但/images/swf/soundmanager2.swf也返回404

+0

嘗試'<%= asset_path('swf/soundmanager2.swf')%>' –

+0

它獲取到該文件的有效路徑,但它不能幫助我,因爲SoundManager2應該選擇四個不同文件中的任意一個在那條路上。 – michelpm

+0

我想知道這是如何與Rails資產管道相關的? –

回答

2

這是不值得的麻煩,因爲你必須禁用消化路徑來獲取文件的名稱權。所以解決方案是修復庫。在聲音管理器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 
2

上軌道4個的所有資產傭工(image_pathasset_path和喜歡)出現,如果你正在訪問的資產是鏈輪實際上解析只返回一個config.assets.prefix -prefixed路徑。
簡單地說:它在預編譯之後必須存在於磁盤上的資產路徑中。

因此,asset_path('swf/')將不起作用,因爲它是一個目錄而不是文件。

另外,我經歷了以下:導軌< 4(鏈輪,而)複製原始圖像(並且因此SWF文件)創建的同一文件的版本消化。因爲這個soundmanager仍然能夠找到非消化swf文件,即使我有config.assets.digest = true
與導軌4,這些原始圖像不會被複制,因爲they changed some precompile internals這導致聲音管理員拋出,如果它想要回退閃光。

要正確修復此聲音管理器需要修補,就像michelpm建議的那樣。
對於soundmanager-rails我開始研究一個修復程序,包括soundmanager的正確修補程序,您可以找到over on github