2013-11-22 15 views
20

Sorry, wenn dies eine langwierige Aufbau zu einer einfachen Frage ist, aber ich wollte meine Gedanken klar zu bekommen.Schienen 4 statische Vermögenswerte in der Öffentlichkeit/oder App/Assets/

Ich habe jetzt Rails 4 für ein paar Projekte verwendet und ich habe image_tag('/assets/image.png') verwendet, um die Änderungen an Asset-Pfad-Helfern in Rails 4 zu umgehen. Das ist bis heute, als ich beschloss, mehr über die Änderungen zu erfahren und gefunden this first change note in sprockets-rails. Ich habe auch bemerkt, dass die ASSET_PUBLIC_DIRECTORIES in /actionview/lib/action_view/helpers/asset_url_helper.rb#L170 in Rails-Helfer nur auf öffentliche Ordner zeigen. Es wurde mir ziemlich offensichtlich, dass Rails, wenn Sie auf statische Dateien zugreifen, möchte, dass Sie den öffentlichen Ordner verwenden.

So, jetzt, dass ich das herausgefunden haben, ich kann einfach nicht verstehen, warum die Kantenschienen docs deutlich machen diese:

In früheren Versionen von Rails wurden alle Vermögenswerte sich in Unterverzeichnissen public wie Bilder, Javascripts und Stylesheets. Bei der Asset-Pipeline ist der bevorzugte Speicherort für diese Assets jetzt das App/Assets-Verzeichnis.

image_path in der Praxis generiert eine uri in den öffentlichen/Bilder-Ordner, die völlig entgegengesetzt ist.

Und um das alles zusammenzufassen, muss ich alle verfügbaren Helfer und Digest-Builder verwenden, weil ich am Ende meine Assets in S3 mit asset_sync bereitstellen.

Also meine Frage ist nur; Gibt es einen korrekten Ort, um Bilder/nicht kompilierte Assets zu platzieren und Asset_path Helfer zu verwenden? Bei der gesamten Dokumentation und jeder anderen Stack-Overflow-Konversation geht es um Leute, die den app/assets-Ordner verwenden, aber rackets-rails möchte, dass wir public für nicht-verdaute Assets verwenden. Benötigen die Dokumente und Informationen im Internet nur eine Aktualisierung oder werden andere nur dazu veranlasst, alle Asset-Pfade mit/assets/voranzustellen?

UPDATE: Ich glaube, ich hatte tatsächlich ein Problem, bei dem ich meinen Entwicklungsserver nicht neu startete und Bilder in der App/Assets/Bilder nicht auftauchten, so dass es auf die Öffentlichkeit zurückfallen würde. Beachten Sie auch, dass ich Asset Helper in meiner Büroklammer default_url verwendet habe (auf die verwiesen wird, um auf Assets in mehreren gefundenen Stack - Überlaufantworten zu verweisen, die Verwendung der Asset - Pfad - Helfer mit interpolierten Optionen in Büroklammer wird aber auch auf die Öffentlichkeit zurückgesetzt, da die nicht interpolierter Asset-Name würde wie eine vorhandene Datei nicht offensichtlich zu finden.

+0

Für alle, die über Google googlen, werden Assets in den Rails Guides unter http://guides.rubyonrails.org/asset_pipeline.html beschrieben –

Antwort

30

Wenn Sie rake assets:precompile verwenden, Rails all Vermögenswerte von Ihrem app/assets Ordner verschoben, bis public/assets. Dies ist als ein normaler Browser keinen Zugriff auf Ihre app Verzeichnis, aber hat Zugriff auf public.

So, um Ihre Frage zu beantworten, hier sind meine Gedanken.Ihre Bilder B. für Logos oder Hintergründe, sollten Sie sie im Verzeichnis app/assets/images speichern. Wenn die Bilder jedoch benutzergeneriert sind, z. B. Profilbilder, sollten diese direkt in etwas gespeichert werden, z. B. public/images. Im Idealfall würden Sie diese in S3 oder einem CDN speichern, aber Sie tun das bereits.

Als Bonus Carrierwave, ein Juwel Rails Hochladen von Bildern, verwendet einen public/images Typen Pfad als Standardspeicher für die Bilder, wie Sie in ihrer Konfigurationsdatei sehen:

# 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 

hoffte, das hilft!