Rails 4 zasoby statyczne w publicznych / lub app / assets/

Przepraszam, jeśli jest to długie nagromadzenie prostego pytania, ale chciałem, aby moje myśli były jasne.

Używałem Rails 4 w kilku projektach i używałem image_tag('/assets/image.png'), aby obejść zmiany w sposobie działania helperów ścieżek zasobów w Rails 4. Tak było do dzisiaj, kiedy postanowiłem dowiedzieć się więcej o zmianach i znalazłem tę pierwszą notatkę o zmianie w zębatkach-szynach . Zauważyłem również, że ASSET_PUBLIC_DIRECTORIES w /actionview / lib/action_view/helpers / asset_url_helper.RB # L170 w Rails helpers wskaż tylko foldery publiczne. Stało się dla mnie dość oczywiste, że jeśli masz dostęp do plików statycznych, Rails chce, abyś używał use the public folder.

Więc teraz, kiedy to rozgryzłem, nie mogę zrozumieć, dlaczego Edge rails docs wyraźnie to stwierdzają:

W poprzednich wersjach Rails wszystkie zasoby znajdowały się w podkatalogach publicznych, takich jak obrazy, Skrypty javascripts i arkusze stylów. Z asset pipeline, preferowaną lokalizacją dla tych aktywów jest teraz Katalog app / assets.

Image_path w praktyce generuje uri do folderu public / images, który jest całkowicie przeciwny.

I podsumowując to wszystko, muszę użyć wszystkich dostępnych helperów i digest builderów, ponieważ kończę wdrażanie moich zasobów do S3 z asset_sync .

Więc moje pytanie jest tylko; czy istnieje poprawne miejsce do umieszczania obrazów/nie skompilowanych zasobów i używania helperów asset_path? Cała dokumentacja i każda inna rozmowa o przepełnieniu stosu chodzi o ludzi korzystających z folderu app/assets, ale sprockets-rails chce, abyśmy używali publicznego dla nietrawionych zasobów. Czy dokumenty i informacje w Internecie wymagają tylko aktualizacji, czy inni po prostu robią ze względu na prepending wszystkich ścieżek zasobów z /assets/?

Aktualizacja: myślę, że rzeczywiście miał problem, gdzie nie było restartowanie mojego serwera deweloperskiego i obrazy w app / assets / images nie pojawiają się, więc będzie fallback do publicznej. Zauważ również, że używałem helperów zasobów w moim spinaczu default_url (który jest określany jako sposób Wskazywania zasobów w kilku odpowiedziach dotyczących przepełnienia stosu, które znalazłem, jednak użycie pomocników ścieżki zasobu z interpolowanymi opcjami w paperclip również wycofa się do publicznej wiadomości, ponieważ nazwa zasobu nie zostanie znaleziona jako istniejący plik.

Author: Taylor j. Eke, 2013-11-22

1 answers

Kiedy używasz rake assets:precompile, Rails przenosi wszystkie zasoby z folderu app/assets do public/assets. Jest tak, ponieważ zwykła przeglądarka nie ma dostępu do katalogu app, ale ma dostęp do public.

Więc, aby odpowiedzieć na twoje pytanie, oto moje myśli. Jeśli obrazy są dla układu witryny np loga lub tła, to należy przechowywać je w katalogu app/assets/images, jednak jeśli obrazy są generowane przez użytkownika, takie jak obrazy profilowe, to powinny być przechowywane bezpośrednio w czymś takim jako public/images. Najlepiej przechowywać je w S3 lub CDN, ale już to robisz. W przeciwieństwie do innych rails ' ów, Carrierwave nie może być używany do przesyłania obrazów Rails, ale może być używany do wysyłania obrazów Rails.]}
    # Override the directory where uploaded files will be stored.
    # This is a sensible default for uploaders that are meant to be mounted:
     def store_dir
     "images/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
     end
Mam nadzieję, że to pomoże!
 30
Author: Amar H-V,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-05 18:45:46