2015-11-02 9 views
6

Sto sviluppando un'applicazione per rotaie a partire da webarch template. So che aggiungere l'intera cartella delle risorse nel pubblico/cartella collegherà le risorse alle mie visualizzazioni, ma non sfrutterà le funzioni della pipeline delle risorse. Il modello ha molti plug-in e diverse opzioni e generalmente non lo si utilizza. La dimensione della cartella delle risorse è 30 MB.Qual è il modo corretto per collegare le risorse di un modello grande nei file erb di rails?

ho pensato di mettere dentro vendor/Attività e utilizzarlo con il gasdotto risorsa, ma questo genera due problemi:

  1. sarei servendo 30 MB di codice minimizzato e l'utilizzo di una piccola percentuale di esso nella mia app .
  2. Dovrei riscrivere manualmente l'intera cartella delle risorse per utilizzare i collegamenti nel modo in cui la pipeline degli asset lo desidera (javascript_include_tag "file" per servire file.js). Certo, lo farei tramite uno script ma sembra ancora un problema che qualcuno avrebbe dovuto incontrare prima.

Dal momento che né il fornitore/i beni né il pubblico/le cartelle sembrano essere una posizione appropriata per questi file, mi piacerebbe un'opzione migliore (o un modo per far funzionare meglio le opzioni successive).

+1

soluzione adeguata è semplicemente quello di non mettere in 30MB di asset non utilizzati nel progetto. Normalmente i modelli hanno un nucleo piccolo (che è OK da includere nelle risorse) e il resto dei componenti è facoltativo. La raccolta di ciliegie/l'adattamento di questi file richiede tempo, ma ne vale la pena. – vemv

+1

@vemv Vedo spesso questo tipo di commento su SO, e scusa se reagisco al tuo. Questa non è una cosa corretta da dire. Voglio dire, puoi dirlo, ma andare avanti e fornire una soluzione, altrimenti non dire nulla. Vedete, non esiste un solo modo di codificare, né un singolo tipo di situazione, ea volte vieni obbligato a fare cose che normalmente non dovresti fare. QUINDI è qui per fornire aiuto, non lezioni di tipo scolastico. Cheers – Benj

+0

@BenjaminSinclaire cosa? Ho dato un consiglio specifico e applicabile che tende ad essere corretto per molti tipi di progetti. – vemv

risposta

5

Una soluzione per mantenere i file sotto pipeline di asset quando sono troppo grandi per essere lasciati in un singolo file di asset minimizzato è dividere le risorse per categorie, compilare tali categorie in diversi file minimizzati e includerle nelle visualizzazioni Quando necessario.

Lo faccio per un'app che contiene diversi componenti "pesanti" di javascript che si trovano in aree diverse della mia app e che non vengono spesso utilizzati.

1- di organizzare la struttura del file

In app/attività/javascrips e app/Attività/fogli di stile creare una directory per ogni categoria che stiamo per creare. Esempi:

  • app/Attività/javascrips/comuni
  • app/beni/javascrips/admin
  • app/attività/javascrips/USER_ACCOUNT

2- Crea il tuo manifesti

In app/assets/javascrips e app/asset/fogli di stile creare un file manifesto per categoria e li hanno inclusi nella directory relativa

File app/beni/javascrips/common.js

//= require jquery 
//= require_tree ./common 

file app/attività/javascrips/admin.js

//= require_tree ./admin 

File app/assets/javascrips/user_account.js

//= require_tree ./user_account 

3- Aggiungi la tua manifesta alle rotaie precompilare lista

È possibile farlo in config/ file di application.rb, ma quando si arriva grande è preferibile per creare un file di inizializzazione config/inizializzatori/assets.rb

Rails.application.configure do 
    config.assets.precompile += %w[common.js admin.js user_account.js] 
end 

4- Includili nelle viste e nei layout e configura le tue librerie javascript.

Importare i file delle risorse in layout e viste. Può essere una buona idea creare diversi layout per aree diverse dell'applicazione che utilizzerebbero file di risorse comuni. I metodi da utilizzare sono stylesheet_link_tag 'manifest_file' e javascript_include_tag 'manifest_file'

E tenere a mente potrebbe essere necessario dire ai tuoi plug-in javascript cui hanno bisogno per utilizzare il file miniminied durante il caricamento di file in modo dinamico. Per loro è possibile utilizzare una configurazione .js.erb file. Esempio:

File app/beni/javascrips/admin/plug-in_config.js.erb

PLUGIN.config('dynamicFileName', '<%= javascript_path('manifest_file') %>'); 
Problemi correlati