ActionController::RoutingError (No route matches [GET] “/assets/logo.png”)…

Opublikowano: 06.12.2011 | Kategoria: Programowanie | Tagi: , | Brak komentarzy »

Ruby on Rails 3.1 z Assets Pipeline i SASS – dla mnie super sprawa. Niestety po update Rails do wersji 3.1.3 i jednoczesnej przesiadce na Ruby 1.9.3 natrafiłem na niespodziewany błąd (ostatecznie, to nie zmiana ich wersji była przyczyną, o czym dalej).

W plikach styli z rozszerzeniem .css.scss używałem linków to obrazków zgodnie z metodą proponowaną przez gem sass-rails: image-url('logo.png') (plik znajdował się oczywiście w odpowiednim katalogu railsapp/app/assets/images/logo.png). Grafika deklarowana w stylach przestała się pojawiać na developmencie, więc na szybko zmieniłem sass-owe image-url na css-owe url. Po wgraniu aplikacji na produkcję i wykonaniu bundle exec rake assets:precompile niestety zamiast obrazków zaczął pojawiać się w logach błąd: ActionController::RoutingError (No route matches [GET] “/assets/logo.png”).

Po kilkunastu próbach znalezienia rozwiązania, winnym okazał się gem Compass, który powodował konflikt z sass-owym image-url zmieniający /assets/logo.png (prawidłowy url) na /images/logo.png (nieprawidłowy).

Pomógł update compass do najnowszej wersji z GitHub i powrót do sass-railsowej składni.