Аудиоаудиты в Rails не дают никаких совпадений маршрутов

Я пытаюсь использовать аудиофайл в рельсах. Я создал папку audios под app\assets\. Я хотел бы использовать активы precompile, так что мне не нужно помещать файл в app\public

Сейчас я получаю

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

Если я изменил URL-адрес от URL/audios/audio_file.wav до URL/assets/audio_file.wav, он будет работать. Как я могу исправить проблему? Каков правильный путь?

Ответы

Ответ 1

Во-первых, в случае, если вы этого не осознали: ваша новая папка app/assets/audios уже находится в пути загрузки... вам просто нужно перезапустить сервер для Sprockets, чтобы его поднять.

В разработке активы доступны по относительному URL: /assets/<asset file name>.

Например, если ваш wav файл находится в /app/assets/audios/audio_file.wav в файловой системе, он будет доступен в относительном URL /assets/audio_file.wav в браузере. Это связано с тем, что Sprockets/Dev-Rails знает поиск папки /app/assets и ее подкаталогов при поиске ресурсов.

В production предварительная компиляция ресурсов (обычно) происходит при развертывании. В это время ваш файл wav копируется, например. /public/assets/audio_file-<MD5 fingerprint>.wav и доступен в относительном URL: /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.