tutorial rails asset application ruby-on-rails css

ruby-on-rails - asset - ruby on rails tutorial



La mejor manera de manejar css dinámico en una aplicación de rieles (5)

Estoy investigando un problema para manejar css dinámico en una aplicación de rieles. Dentro de la aplicación, los usuarios individuales y / o grupos de usuarios pueden tener una apariencia personalizada que se logra a través de CSS. No habrá un número fijo de archivos de "apariencia" o "css", el número aumentará a medida que la cantidad de usuarios y grupos crezca y la apariencia esté definida por los usuarios a través de la interfaz de administración de la aplicación. A lo largo del curso de un día típico, se servirán miles (no decenas de miles) de diferentes variaciones del css. La aplicación almacenará el css preconstruido en mongodb, por lo que no tendrá que pagar el precio de construir el css para cada solicitud, la pregunta es más acerca de cómo es la mejor manera de ofrecer este contenido css dinámico. He visto otras preguntas como [esta] [1] que hablan sobre el uso de erb o sass, pero algunas de estas respuestas tienen fecha por varios años, así que quería asegurarme de que no había una mejor respuesta con Rails 3.


Ahora digamos que tiene un estilo dinámico llamado dynamic.css.scss.erb (¡el .erb al final es importante!) En app / asset / stylesheets. Será procesado por erb (y luego por Sass), y como tal puede contener cosas como

.some_container { <% favorite_tags do |tag, color| %> .tag.<%= tag %=> { background-color: #<%= color %>; } <% end %>

}


Bueno, he trabajado con esto un par de veces, pero definitivamente se han corregido la falta de archivos CSS para elegir. Debería ser el mismo más o menos.

Una de las cosas que usé mucho fue el contenido de los bloques. Básicamente

<% content_for :css do %> // some css file or css content <% end %>

Y en el layout

<%= yield :css %>

Manera muy sencilla de gestionar los diseños.



Puede tratar sus archivos CSS como recursos , almacenarlos en la base de datos y servirlos con el almacenamiento en caché de la página , de modo que solo necesita golpear la base de datos una vez que se modifica el CSS. Todas las solicitudes posteriores serán atendidas directamente por el servidor web desde el caché, sin tocar nunca su aplicación 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" />


Tuve un problema similar, pero necesitaba servir el CSS modificado solo una vez. Almaceno un par de constantes en un módulo ''Sitio'', que luego puedo usar como constantes en CSS o como constantes en toda la aplicación Rails. Genero automáticamente los archivos CSS cada vez que se reinicia la aplicación Rails y se modifican los archivos de entrada CSS.

Podría hacer algo similar, pero hacer referencia a nombres simbólicos en site_settings.rb y luego obtenerlos por usuario desde MongoDB

http://unixgods.org/~tilo/Ruby/Using_Variables_in_CSS_Files_with_Ruby_on_Rails.html