在rails应用程序中处理动态css的最佳方法

我正在研究在rails应用程序中处理动态css的问题。 在应用程序中,个人用户和/或用户组可以通过CSS实现自定义外观。 没有任何固定数量的“外观”或css文件,数量将随着用户和组数量的增长而增长,并且用户通过应用程序的管理界面定义外观。 在整个典型的一天中,将提供数千(不是数万)不同的css变体。 该应用程序将预先构建的CSS存储在mongodb中,因此它不必为每个请求支付构建css的代价,问题更多的是如何提供这个动态css内容的最佳方式。 我已经看到了其他问题,如[这一个] [1],说使用erb或sass,但其中一些答案已经过了几年,所以我想确保Rails 3没有更好的答案。

您可以将CSS文件视为资源 ,将它们存储在数据库中,并使用页面缓存为它们提供服务,这样您只需在修改CSS时点击一次 db。 所有后来的请求都将由Web服务器直接从缓存中提供,而不会触及您的应用程序或数据库。

# 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 …  

好吧,我已经使用了几次但是它们肯定没有CSS文件可供选择。 它应该或多或少相同。

我使用的很多东西之一是content_for块。 基本上

 <%content_for:css do%>
  //一些css文件或css内容
 <%end%>

并在布局中

 <%= yield:css%>
 

管理布局的非常简单的方法。

这可能会给你一些想法: rails中的子域名的多个robots.txt

我遇到了类似的问题 – 但只需要修改一次CSS。 我将一些常量存储在模块“Site”中 – 然后我可以将其用作CSS中的常量或整个Rails应用程序中的常量。 每当Rails应用程序重新启动并修改CSS输入文件时,我都会自动生成CSS文件。

您可以执行类似的操作,但在site_settings.rb中引用符号名称,然后从MongoDB中按用户获取这些名称

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

现在让我们假设您在app / assets / stylesheets中有一些名为dynamic.css.scss.erb的动态样式(最后的.erb很重要!)。 它将由erb(然后由Sass)处理,因此可以包含类似的东西

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

}