Sto cercando un problema per la gestione dei css dinamici in un'app per rails. All'interno dell'app, i singoli utenti e/o gruppi di utenti possono avere un aspetto personalizzato che viene realizzato tramite CSS. Non ci sarà alcun numero fisso di file "look and feel" o css, il numero aumenterà con l'aumentare del numero di utenti e gruppi e l'aspetto e la percezione degli utenti viene definito dall'interfaccia di amministrazione dell'applicazione. Durante il corso di una giornata tipica verranno offerte migliaia (non decine di migliaia) di diverse varianti del css. L'app memorizzerà i css pre-costruiti in mongodb, quindi non ci sarà bisogno di pagare il prezzo della costruzione del css per ogni richiesta, la domanda è più su come è il modo migliore per servire questo contenuto css dinamico. Ho visto altre domande come [questa] [1] che parlano di usare erb o sass, ma alcune di queste risposte sono datate da diversi anni quindi volevo assicurarmi che non ci fosse una risposta migliore con Rails 3.Il modo migliore per gestire i css dinamici in un'app per rails
risposta
Questo potrebbe darvi un paio di idee: Multiple robots.txt for subdomains in rails
Senza una spiegazione, questa non è una "risposta" ... ma è un grande contributo. –
È possibile trattare i vostri file CSS come risorse, memorizzarli sul database, e servirli con page caching, in modo che avete solo bisogno di colpire il db una volta quando il CSS viene modificato. Tutte le richieste successive saranno servite direttamente dal server web dalla cache, senza mai toccare la tua app o db.
# stylesheet.rb
class Stylesheet < ActiveRecord::Base
validates_presence_of :contents
end
# stylesheets_controller.rb
class StylesheetsController < ApplicationController
caches_page :show # magic happens here
def show
@stylesheet = Stylesheet.find(params[:id])
respond_to do |format|
format.html # regular ERB template
format.css { render :text => @stylesheet.contents, :content_type => "text/css" }
end
end
# the rest is your typical RESTful controller,
# just remember to expire the cache when the stylesheet changes
end
# routes.rb
resources :stylesheets
# layouts/application.html.erb
…
<link href="<%= stylesheet_path(@current_user.stylesheet) %>" rel="stylesheet" type="text/css" />
Sto provando questo approccio ma sto incontrando un problema. Ho un'immagine di sfondo sull'elemento body nel mio css, ma questo non viene richiesto quando viene richiesto il css. –
La mia immagine di sfondo viene visualizzata correttamente se uso 'background: url ('/ assets/image.jpg')' –
Ho dovuto incorporare la route stylesheet_path (risorsa) e aggiungere .css al mio browser per interpretare il mio tag link come un tipo css, insieme a type = 'text/css' come questo: "# {stylesheet_link_tag (stylesheet)}. css" – dennis
Bene, ho lavorato con questo un paio di volte ma sono stati risolti senza alcun file CSS tra cui scegliere. Dovrebbe essere lo stesso più o meno.
Una delle cose che ho usato molto era il content_for blocchi. Fondamentalmente
<% content_for :css do %> // some css file or css content <% end %>
E nel layout
<%= yield :css %>
modo molto semplice per gestire i layout.
Ho avuto un problema simile, ma avevo bisogno di servire il CSS modificato solo una volta. Memorizzo un paio di costanti in un modulo 'Sito' - che posso quindi usare come costanti in CSS o come costanti in tutta l'applicazione Rails. I file CSS vengono generati automaticamente ogni volta che l'applicazione Rails si riavvia e i file di input CSS sono stati modificati.
Si potrebbe fare qualcosa di simile, ma fare riferimento a nomi simbolici site_settings.rb e poi andare a prendere quelli su un singolo utente da MongoDB
http://unixgods.org/~tilo/Ruby/Using_Variables_in_CSS_Files_with_Ruby_on_Rails.html
Ora diciamo che avete un po 'stile dinamico chiamato dinamica .css.scss.erb (il file .erb alla fine è importante!) in app/assets/stylesheets. Verrà elaborato da erb (e quindi da Sass), e come tale può contenere cose come
.some_container {
<% favorite_tags do |tag, color| %>
.tag.<%= tag %=> {
background-color: #<%= color %>;
}
<% end %>
}
- 1. il modo migliore per caricare script dinamici
- 2. Magento - Il modo migliore per gestire i moduli in blocchi?
- 3. Il modo migliore per gestire l'unione JPA?
- 4. Il modo migliore per gestire un KeyNotFoundException
- 5. Il modo migliore per gestire i messaggi di errore
- 6. modo migliore per gestire i dati degli attributi in Slim
- 7. Il modo migliore per gestire più costruttori in Java
- 8. Il modo migliore per gestire molti pacchetti in entrata
- 9. Il modo migliore per gestire snippet di codice in Linux?
- 10. Il modo migliore per gestire l'overflow integer in C#?
- 11. Il modo migliore per gestire la multi-tenancy in Rails 3
- 12. modo migliore per creare iframe dinamici in jQuery?
- 13. Il modo migliore per implementare il voto in un'applicazione Rails?
- 14. Il modo migliore per la versione di un'app per rails?
- 15. Qual è il modo migliore per testare un'app per rails?
- 16. Il modo migliore per gestire l'intervallo di 360 gradi
- 17. Il modo migliore per creare colonne in HTML/CSS
- 18. Il modo migliore per gestire le dipendenze di Android Gradle
- 19. Il modo migliore per gestire più connessioni NSURL
- 20. Rails - qualche modo elegante per gestire 404s?
- 21. il modo migliore per gestire pyd/pdb flakiness re/stdout?
- 22. Il modo migliore per gestire le modifiche del database
- 23. Il modo migliore per gestire javascript all'interno dei controlli personalizzati?
- 24. Qual è il modo migliore per gestire più azioni?
- 25. Un modo migliore per gestire NullReferenceExceptions in C#
- 26. Il modo ideale per gestire i risultati Solr in PHP?
- 27. CSS: il modo migliore per allineare un float: sezione destra
- 28. Il modo migliore per aggiungere nuove regole css con jquery?
- 29. modo migliore per gestire le eccezioni Java in ServletContextListener
- 30. Qual è il modo migliore per gestire i rami delle filiali del fornitore in SVN?
Invece di memorizzare css in MongoDB, perché non memorizzarlo in un file css su disco nella directory pubblica con un nome file che è legato all'id dell'utente? In questo modo è possibile servire normalmente il css (tramite un tag di collegamento nella testa) e sfruttare il caching del browser. Ogni volta che viene apportata una modifica, è sufficiente svuotare la cache e aggiungere un cachebuster basato sul tempo di modifica al tag di collegamento src. –