2013-08-31 10 views
15

Próbuję użyć pliku audio w szynach. Stworzyłem folder audios pod app\assets\. Chciałbym wykorzystać aktywa prekompilacji tak że nie mam umieścić plik pod app\publicZasoby audio w Railsach nie ma tras Dopasowanie

Teraz dostaję

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

Jeśli zmienię URL z URL/audios/audio_file.wav do URL/assets/audio_file.wav to działa. Jak mogę rozwiązać problem? Jaka jest właściwa droga?

Odpowiedz

21

Po pierwsze, w przypadku, gdy jeszcze tego nie wiesz: nowy folder app/assets/audios znajduje się już w ścieżce ładowania ... wystarczy ponownie uruchomić serwer w poszukiwaniu złączy, aby go odebrać.

W zasoby są dostępne pod adresem URL: /assets/<asset file name>.

Na przykład zakładając, że plik wav znajduje się pod numerem /app/assets/audios/audio_file.wav w systemie plików, będzie dostępny pod odpowiednim adresem URL /assets/audio_file.wav w przeglądarce. Dzieje się tak dlatego, że oprogramowanie Sprockets/Dev-Rails przeszukuje folder /app/assets i jego podkatalogi podczas lokalizowania zasobów.

W produkcji, prekompilacja zasobów (zwykle) dzieje się przy wdrażaniu. W tej chwili plik wav jest kopiowany na przykład do /public/assets/audio_file-<MD5 fingerprint>.wav i jest dostępny pod odpowiednim adresem URL: /assets/audio_file-<MD5 fingerprint>.wav.

Ze względu na różne style nazewnictwa używane między rozwojem a produkcją, za każdym razem, gdy chcesz odwołać się do zasobu, powinieneś to zrobić za pomocą metody pomocniczej (nawet w CSS!). Oznacza to, że produkcja obejmuje odcisk palca MD5, podczas gdy rozwój nie. Ale nie trzeba się martwić o jakichkolwiek że tak długo, jak używać pomocnika:

  • Dla obrazów: <%= image_tag('homes/logo.png') %> - dany plik obrazu, który mieszka w /app/assets/images/homes/logo.png w systemie plików.
  • W przypadku niestandardowych zasobów, takich jak pliki audio: <%= asset_path('audio_file.wav') %>, które spowodowałyby względną ścieżkę /assets/audio_file.wav.