5

Uaktualniam aplikację Rails 3 do wersji 3.2 i konfiguruję potok zasobów. To jest świetne dla css/js, ale nie widzę sensu w używaniu go do obrazów, i niestety mam css z mnóstwem referencji /images/*.png i tym podobne.Wyłączanie potoku Rails 3.1 dla obrazów tylko?

Czy istnieje sposób wyłączenia potoku zasobów tylko dla obrazów, aby image_tag("x.png") powrócił do powrotu <img src="/images/x.png"> zamiast <img src="/assets/x.png">? Dzięki!

Odpowiedz

0

Zobacz ten klejnot: https://github.com/spohlenz/digestion, powinien zrobić to, czego potrzebujesz :).

W przeciwnym razie możesz przenieść zasoby, których nie chcesz uwzględnić w potoku aktywów z aplikacji/zasobów, z powrotem do publicznych (np. Publiczne/obrazy). Wszystko powinno działać tak, jak oczekujesz bez klejnotów.

4

Można actionView małpa-łata :: Base, spróbuj tego w konsoli szyn:

helper.image_path "foo" #=> "/assets/foo" 

module OldImagePath 
    def image_path(source) 
    asset_paths.compute_public_path(source, 'images') 
    end 
    alias_method :path_to_image, :image_path 
end 
ActionView::Base.send :include, OldImagePath 

helper.image_path "foo" #=> "/images/foo" 

Możesz umieścić ten do inicjowania na przykład. Domyślnie ActionView :: Base zawiera ActionView :: Helpers :: AssetTagHelper i Sprockets :: Helpers :: RailsHelper, które definiują image_path, ale mają pierwszeństwo. Załączam własny moduł, który ma pierwszeństwo nad wszystkimi (kod wewnątrz jest pobierany z ActionView :: Helpers :: AssetTagHelper).

Chociaż sensowne jest użycie potoku aktywów również dla obrazów. Otrzymują sumę mieszającą w swoich nazwach plików, aby mogły być przechowywane w pamięci podręcznej na zawsze po stronie klienta bez pytania serwera, czy plik został zmieniony.

+0

Czy ktoś może to potwierdzić? Skończyło się na tym, że gryzłem kulę i obejmowałem również plik aktywów dla obrazów. – swrobel

+0

Dziękuję @ Siemio działa jak urok !! – wael34218

+0

Dzięki! Użyłem tej techniki, aby powstrzymać błąd AssetNotPrecompiledError przed produkcją błędu 500 serwera podczas produkcji, jeśli wystąpi błąd rozwiązania ścieżki obrazu w potoku zasobów. W moim override of image_path, po prostu nazywam "super (source)", ale dodać klauzulę ratunkową, która rejestruje błąd i zwraca "#" dla ścieżki. Wpisałem linię "ActionView :: Base.send" do inicjalizatora, zgodnie z sugestią. Działa świetnie! –

Powiązane problemy