Rails中的音频资产带来无路由匹配

时间:2013-08-31 19:34:36

标签: ruby-on-rails asset-pipeline

我正在尝试在rails中使用音频文件。我在audios下创建了一个文件夹app\assets\。我想使用资产预编译,这样我就不必将文件放在app\public

现在我正在

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

如果我将网址从URL/audios/audio_file.wav更改为URL/assets/audio_file.wav则可行。我该如何解决这个问题?什么是正确的方法?

1 个答案:

答案 0 :(得分:23)

首先,如果您还没有意识到:您的新app/assets/audios文件夹已经在加载路径中......您只需重新启动服务器以便Sprockets将其取出。

开发中,资产位于相对网址:/assets/<asset file name>

例如,假设您的wav文件位于文件系统中的/app/assets/audios/audio_file.wav,则可以通过浏览器中的相对URL /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