2013-08-31 35 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
相关问题