2011-07-03 15 views
50

Próbuję umieścić niektóre obrazy zewnętrzne (używane przez wtyczkę jQuery) do dostawcy/aktywów/obrazów w mojej aplikacji Rails 3.1. Problem polega na tym, że gdy próbuję coś takiego:Rails 3.1 obsługujących obrazy od dostawcy/aktywów/obrazów

<%= image_tag "ui-bg_flat_75_ffffff_40x100.png" %> 

pojawia się błąd:

No route matches [GET] "/assets/ui-bg_flat_75_ffffff_40x100.png" 

Sprawdziłem Rails.application.config.assets.paths i wykaz tych katalogów:

..../app/assets/images 
..../app/assets/javascripts 
..../app/assets/stylesheets 
..../vendor/assets/images 
..../vendor/assets/stylesheets 
..../.rvm/gems/[email protected]/gems/jquery-rails-1.0.9/vendor/assets/javascripts 

Jak widać/vendor/assets/images znajduje się tam. Jeśli umieściłem mój obraz w aplikacji/zasobach/obrazach, wszystko działa.

Pomyślałem, że nowy rurociąg aktywów powinien przejść przez wszystkie katalogi aktywów i służyć żądanemu plikowi, gdziekolwiek go znajdzie.

Czy ktoś wie, na czym polega problem?

+0

Niestety, nie pomaga to dokładnie Twojemu problemowi, ale jak widzisz Rails.application.config.assets.paths? – Martin

+1

@martin: możesz to zobaczyć w konsoli –

+0

To może być głupie pytanie, ale czy twoje zasoby jqueryui znajdują się w katalogu images? Kopalnia znajduje się w katalogu obrazów, a następnie w ich własnym podkatalogu, aby zachować ścieżki CSS, generuje kreator kompozycji jqueryui. – Slick23

Odpowiedz

80

Po utworzeniu katalogu vendor/assets/images musiałem zrestartować serwer szyny. Wcześniej widziałem ten sam błąd co Ty ("Brak dopasowania trasy [GET]").

Domyślam się, że serwer szyn nie sprawdza tych katalogów, jeśli nie istniały one podczas pierwszego uruchomienia. Po otwarciu konsoli szyn w celu zdiagnozowania problemu otrzymujesz nowe wystąpienie szyn, które wie o katalogu, co tylko zwiększa zamieszanie.

+1

Restart załatwił sprawę. Dzięki! –

+0

Używanie Pow (i klejnotu w proszku) Właśnie próbowałem "restartu proszku" bez powodzenia. Następnie próbowałem "pudru w dół" i "pudru do góry" i wreszcie Rails.application.config.assets.paths włączone dostawcy/aktywa/obrazy. – Chris

+1

'Powtórne restartowanie' zmyliło dla mnie – Cristian

9

Potok zasobów został opisany w tym przewodniku po szynach przez Ryana Bigga (stan projektu w tej chwili).

http://ryanbigg.com/guides/asset_pipeline.html i http://ryanbigg.com/2011/06/sprocket-asset-tags-internals/ dla referencji.

Zgodnie z tym twój przykład powinien działać.

Extract:

Assets can be placed inside an application in one of three locations: app/assets, lib/assets or vendor/assets.

app/assets is for assets that are owned by the application, such as custom images, javascript files or stylesheets.

lib/assets is for your own libraries’ code that doesn’t really fit into the scope of the application or those libraries which are shared across applications.

vendor/assets is for assets that are owned by outside entities, such as code for JavaScript plugins.

Any subdirectory that exists within these three locations will be added to the search path for Sprockets (visible by calling Rails.application.config.assets.paths in a console). When an asset is requested, these paths will be looked through to see if they contain an asset matching the name specified. Once an asset has been found, it’s processed by Sprockets and then served up.

Ja testowałem na przykładzie w mojej aplikacji i tej samej składni jak twoje prace. Może masz literówkę w nazwie swojego zasobu.

Dla Martina: ścieżka wyszukiwania dla ząbków jest widoczna po wywołaniu w konsoli konsoli Rails.application.config.assets.path.

+0

Tak, przeczytałem to. Dlatego myślę, że to powinno zadziałać. Może to błąd. –

+0

Dla mnie to działa. Czy próbowałeś zmienić nazwę swojego zasobu jako testu? –

+0

To jest powtarzający się problem we wszystkich moich aplikacjach, które buduję w Railsach 3 – botbot

22

Jeśli używasz tematu motywu jQuery UI, problem może polegać na tym, że w pliku css jquery-ui obrazy są przywoływane w podkatalogu "obrazy".

tj. musisz umieścić swoje zdjęcia w folderze './app/assets/images/images' lub musisz edytować plik css jquery-ui i usunąć prefiks folderu "images /".

+8

To trochę zagmatwane, że możesz zobaczyć 'GET http://example.com/assets/images/darrowleft.gif 404 (Nie Found) 'w konsoli javascript i masz ten obraz w' vendor/assets/images'. Jednak należy * sprawdzić * adres 'http: // example.com/assets/darrowleft.gif' dla adresu URL. Aby zobaczyć "http: // example.com/assets/images/darrowleft.gif", musisz umieścić ten obraz w 'vendor/assets/images/images' jak wyjaśniono @woelfle. Dzięki temu zaoszczędzisz kłopotów związanych z koniecznością modyfikacji ścieżek w dostarczanych plikach CSS. –

+0

Umieszczenie obrazów w kolejnym folderze o nazwie Obrazy wydaje się dziwne, ale pracowałem dla mnie na szynach 3.1.3. Dzięki! – counterbeing

+0

Dziękuję, George, to był brakujący element układanki dla mnie! – Sprachprofi

2

Może powinieneś utworzyć inny folder w/assets/images. Tworzysz nazwę "obrazy", a następnie kopiujesz cały obraz jquery-ui i wklejasz do folderu "obrazy", które tworzysz wcześniej. Mam nadzieję, że to ci pomoże.