Estoy investigando un problema para manejar css dinámicos 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á una cantidad fija de archivos "look and feels" o css, el número aumentará a medida que la cantidad de usuarios y grupos crezca y la apariencia sea definida por los usuarios a través de la interfaz de administración de la aplicación. A lo largo 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 servir este contenido CSS dinámico. He visto otras preguntas como [ésta] [1] que hablan de usar erb o sass, pero algunas de estas respuestas tienen fecha por varios años, así que quería asegurarme de que no hubiera una mejor respuesta con Rails 3.La mejor manera de manejar CSS dinámico en una aplicación de rieles
Respuesta
Esto podría darle algunas ideas: Multiple robots.txt for subdomains in rails
Sin una explicación, esta no es toda una 'respuesta' ... pero es una gran contribución. –
puede tratar sus archivos CSS como recursos, almacenarlos en la base de datos, y servirlos con page caching, para que sólo tenga que pulsar el PP vez cuando se modifica el CSS. Todas las solicitudes posteriores serán servidas directamente por el servidor web desde la memoria caché, sin tocar 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" />
Estoy intentando este enfoque, pero tengo un problema. Tengo una imagen de fondo en el elemento del cuerpo en mi CSS pero esto no se solicita cuando se solicita el CSS. –
Mi imagen de fondo se representa correctamente si uso 'background: url ('/ assets/image.jpg')' –
Tuve que incrustar la ruta de stylesheet_path (recurso) y agregarle .css para que mi navegador interprete mi etiqueta de enlace como un tipo css, junto con el tipo = 'text/css' como lo siguiente: "# {stylesheet_link_tag (stylesheet)}. css" – dennis
Bueno, he trabajado con esto un par de veces pero definitivamente no se han solucionado los archivos CSS para elegir. Debería ser el mismo más o menos.
Una de las cosas que utilicé mucho fue el content_for bloques. Básicamente
<% content_for :css do %> // some css file or css content <% end %>
Y en la disposición
<%= yield :css %>
manera muy sencilla para la gestión de los diseños.
Tuve un problema similar, pero necesitaba servir el CSS modificado solo una vez. Guardo 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 de CSS.
Se podría hacer algo similar, pero la referencia nombres simbólicos en site_settings.rb y luego ir a buscar los de una base por usuario de MongoDB
http://unixgods.org/~tilo/Ruby/Using_Variables_in_CSS_Files_with_Ruby_on_Rails.html
Ahora digamos que usted tiene un poco de estilo dinámico denominado dinámico .css.scss.erb (¡el .erb al final es importante!) en app/assets/stylesheets. Que será procesada 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 %>
}
- 1. ¿La mejor manera de versionar una aplicación de rieles?
- 2. La mejor manera de manejar una KeyNotFoundException
- 3. Rieles: ¿Manera elegante de manejar la navegación?
- 4. ¿Una mejor manera de manejar la bifurcación y la fusión?
- 5. Generación de CSS dinámico
- 6. mejor manera de manejar múltiples NSTableView (s)
- 7. La mejor manera de manejar los mensajes de error
- 8. Una mejor manera de manejar NullReferenceExceptions en C#
- 9. ¿Cuál es la mejor manera de almacenar la configuración específica de la aplicación en los rieles?
- 10. ¿Cuál es la mejor manera de probar una aplicación de rieles?
- 11. ¿La mejor manera de manejar múltiples UITableViews en un UIViewController?
- 12. ¿Cuál es la mejor manera de manejar FBO en OpenGL?
- 13. ¿Cuál es la mejor manera de manejar excepciones en Perl?
- 14. La mejor manera de manejar cadenas enormes en C#
- 15. La mejor manera de construir un filtro múltiple en rieles
- 16. ¿La mejor manera de guardar datos en una aplicación Java?
- 17. La mejor manera de autenticar usuarios en una aplicación web
- 18. ¿Cuál es la mejor manera de manejar buffers grandes en una pila de protocolos en capas?
- 19. ¿Cuál es la mejor manera de manejar objects.get de Django?
- 20. Cuál es la mejor manera de rotar registros para la aplicación de rieles
- 21. ¿La mejor manera de probar la aplicación web de los rieles?
- 22. ¿Cuál es la mejor manera de manejar múltiples acciones?
- 23. La mejor manera de hacer una aplicación de iPhone multilingüe
- 24. ¿Cuál es la mejor manera de depurar css en ie?
- 25. ¿Cuál es la mejor manera de crear una matriz de crecimiento dinámico en Scala?
- 26. La mejor manera de probar una aplicación Delphi
- 27. La mejor manera de permitir complementos para una aplicación PHP
- 28. ¿Cuál es la mejor manera de perfilar una aplicación Sinatra?
- 29. ¿Cuál es la mejor manera de implementar una aplicación Pylons?
- 30. ¿Cuál es la mejor manera de almacenar la configuración global de la aplicación en una aplicación de Rails?
En lugar de almacenar el css en mongodb, por qué no almacenarlo en un archivo CSS en el disco en el directorio público con un nombre de archivo que está vinculado a la identificación del usuario? De esa forma, podría servir el CSS normalmente (mediante una etiqueta de enlace en la cabeza) y aprovechar el almacenamiento en caché del navegador. Cada vez que se realiza un cambio, puede borrar el caché y agregar un cachebuster basado en el tiempo de edición a la etiqueta de enlace src. –