2013-08-31 32 views
15

我試圖在rails中使用音頻文件。我在app\assets\下創建了一個文件夾audios。我想預編譯使用的資源,這樣我就不必把文件下app\publicRails中的音頻資產帶來沒有路由匹配

現在我越來越

ActionController::RoutingError (No route matches [GET] "/audios/audio_file.wav") 

如果我更改網址URL/audios/audio_file.wavURL/assets/audio_file.wav它的工作原理。我該如何解決這個問題?什麼是正確的方式?

回答

21

首先,如果您還沒有意識到:您的新app/assets/audios文件夾已經在加載路徑中......您只需重新啓動服務器以便Sprockets將其加載即可。

開發,資產可在相對網址:/assets/<asset file name>

例如,假設您的wav文件位於文件系統中的/app/assets/audios/audio_file.wav,則可通過瀏覽器中的相關網址/assets/audio_file.wav進行訪問。這是因爲在定位資產時,Sprockets/Dev-Rails知道要搜索/app/assets文件夾及其子目錄。

生產,資產預編譯(通常)發生在部署。目前,你的wav文件被複制到例如/public/assets/audio_file-<MD5 fingerprint>.wav,可通過相關網址獲得:/assets/audio_file-<MD5 fingerprint>.wav。因爲在開發和生產之間使用不同的命名風格,任何時候你想要引用一個資產,你都應該使用一個輔助方法(甚至在CSS中!)。也就是說,生產包括MD5指紋,而開發不包含。但你沒有,只要你使用一個輔助擔心任何的是:

  • 對於圖片:<%= image_tag('homes/logo.png') %> - 因爲住在/app/assets/images/homes/logo.png文件系統上的圖像文件。
  • 對於非標準資產,如音頻文件:<%= asset_path('audio_file.wav') %>,這會產生相對路徑爲/assets/audio_file.wav
相關問題