2013-11-22 11 views
20

Ci scusiamo se si tratta di un lungo accumulo di una semplice domanda, ma volevo chiarire i miei pensieri.Rails 4 asset statici in pubblico/o app/assets/

Ho usato Rails 4 su un paio di progetti ora e ho utilizzato image_tag('/assets/image.png') per aggirare le modifiche a come gli helper del percorso risorse funzionano in Rails 4. Questo è fino a oggi quando ho deciso di saperne di più sulle modifiche e trovato this first change note in sprockets-rails. Ho anche notato che lo ASSET_PUBLIC_DIRECTORIES in /actionview/lib/action_view/helpers/asset_url_helper.rb#L170 negli helper di Rails punta solo alle cartelle pubbliche. È diventato abbastanza ovvio per me che se stai accedendo a file statici, Rails vuole che tu usi la cartella pubblica.

Quindi, ora che ho capito questo, non riesco proprio a capire perché i bordo rotaie docs indicano chiaramente questo:

Nelle precedenti versioni di Rails, tutte le attività erano situati nelle sottodirectory pubblico come immagini, javascript e fogli di stile. Con la pipeline degli asset, la posizione preferita per queste risorse è ora la directory app/assets.

image_path in pratica genera un uri per la cartella public/images che è totalmente contrario.

E per riassumere tutto in su ho bisogno di usare tutti i collaboratori disponibili e digerire i costruttori, perché io alla fine la distribuzione mio patrimonio a S3 con asset_sync.

Quindi la mia domanda è giusta; c'è un corretto posto dove mettere le immagini/le risorse non compilate e utilizzare gli helper di asset_path? Tutta la documentazione e ogni altra conversazione di overflow dello stack riguarda persone che utilizzano la cartella app/assets, ma i rocchetti di trascinamento vogliono che usiamo il pubblico per le risorse non digest. I documenti e le informazioni sul web hanno bisogno solo di un aggiornamento, o altri lo fanno solo con la preposizione di tutti i percorsi di asset con/assets /?

AGGIORNAMENTO: Penso di aver effettivamente avuto un problema in cui non stavo riavviando il mio server di sviluppo e le immagini in app/risorse/immagini non venivano mostrate in modo che sarebbe fallback al pubblico. Nota anche che stavo usando gli aiutanti di asset nel mio paperclip default_url (che è indicato come il modo di puntare ad asset in diverse risposte di overflow dello stack che ho trovato, tuttavia usare gli helper del percorso risorse con le opzioni interpolate in paperclip tornerà anche al pubblico, perché il nome risorsa uninterpolated non sarebbe stato trovato come un file esistente, ovviamente.

+0

Per il beneficio di chiunque si sia imbattuto in questo tramite googling, le risorse sono descritte nelle guide delle guide all'indirizzo http://guides.rubyonrails.org/asset_pipeline.html –

risposta

30

Quando si utilizza rake assets:precompile, Rails muove tutte le attività dalla cartella app/assets, a public/assets. Questo è come un normale browser non ha accesso al vostro app, ma ha accesso a public.

Quindi, per rispondere alla tua domanda, ecco i miei pensieri. per il layout del tuo sito, ad es. loghi o sfondi, devi archiviarli nella directory app/assets/images, tuttavia, se le immagini sono generate dall'utente, come le immagini del profilo, queste dovrebbero essere memorizzate direttamente in qualcosa come public/images. Idealmente dovresti memorizzare quelli in S3 o in un CDN, ma lo stai già facendo.

Come bonus, Carrierwave, un Rails l'immagine di upload gemma, utilizza un percorso public/images tipo come archivio di default per le sue immagini, come si può vedere nella loro file di configurazione:

# 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 

Spero che questo aiuti!

Problemi correlati