我正在研究在Rails应用程序中处理动态CSS的问题。在应用内,个人用户和/或用户组可以拥有通过CSS完成的自定义外观和感觉。不会有任何固定数量的“外观和感觉”或css文件,这个数字将随着用户和组的增长以及用户通过应用程序的管理界面定义的外观和感觉而增加。在整个典型的过程中,成千上万(不是数以万计的)不同的css变体将被提供。该应用程序会将预建的css存储在mongodb中,因此它不必为每个请求都支付构建css的代价,问题更多的是如何提供此动态CSS内容的最佳方式。我见过其他问题,比如[使用erb或sass]的[this] [1],但其中一些答案的日期是几年,所以我想确保Rails 3没有更好的答案。在Rails应用程序中处理动态CSS的最佳方法
回答
这可能会给你一些想法:Multiple robots.txt for subdomains in rails
没有一个解释,这不是一个'答案'...但它是一个伟大的贡献。 – 2013-04-19 22:58:04
您可以把你的CSS文件作为资源,将它们存储在数据库中,并与page caching为他们提供服务,让你只需要击中分贝一次当CSS被修改时。以后的所有请求都将由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
…
<link href="<%= stylesheet_path(@current_user.stylesheet) %>" rel="stylesheet" type="text/css" />
我正在尝试这种方法,但遇到问题。我在CSS中的body元素上有一个背景图片,但是在请求css时没有被请求。 – 2011-11-13 19:22:49
那么,我已经与这个工作了几次,但他们肯定没有固定的CSS文件可供选择。它应该或多或少相同。
我用过的很多东西之一是content_for块。基本上
<% content_for :css do %> // some css file or css content <% end %>
而且在布局管理布局
<%= yield :css %>
非常简单的方法。
我有一个类似的问题 - 但只需要修改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
现在让我们假设你有一些所谓的动态动态造型.css.scss.erb(最后的.erb非常重要!)在app/assets/stylesheets中。它将由ERB(然后通过萨斯)进行处理,并且因此可以包含这样的东西
.some_container {
<% favorite_tags do |tag, color| %>
.tag.<%= tag %=> {
background-color: #<%= color %>;
}
<% end %>
}
- 1. web应用程序,处理状态的最佳方式
- 2. 在rails应用程序中静态页面的最佳做法
- 3. 处理WP7应用程序开发的最佳方法?
- 4. 在Rails应用程序中处理多种货币的最佳方式
- 5. 在程序中处理用户设置的最佳方法
- 6. 在Rails应用程序中测试视图的最佳方法
- 7. 在Rails应用程序中管理多页JavaScript的最佳方法是什么?
- 8. 在其处理程序中捕获信号的最佳方法
- 9. 在独立应用程序中处理“忘记密码”的最佳方法
- 10. 在Web应用程序中处理客户特定请求的最佳方法?
- 11. 在三层应用程序中处理数据并发的最佳方法
- 12. 在Web应用程序中处理DateTime的最佳方法是什么?
- 13. codeigniter/php应用程序中错误处理的最佳做法
- 14. 处理应用程序中的数据请求,最佳做法
- 15. 在文件下载HTTP处理程序中处理404的最佳方法?
- 16. 在rails中处理API版本控制的最佳方法
- 17. 在Rails 2.1.x中处理RoutingError的最佳方法是什么?
- 18. 在Rails中处理多租户的最佳方法3
- 19. 在Rails中处理多张照片的最佳方法
- 20. bootstrap-confiirmation不处理方法:在rails应用程序中删除
- 21. JQuery - on() - 方法/动态处理程序
- 22. jQuery应用事件处理程序的最佳方式
- 23. 在Win Forms应用程序中处理多个线程的最佳方式
- 24. 同时运行代码处理多线程应用程序的最佳方法
- 25. 在Rails应用程序中实现投票的最佳方式?
- 26. 处理应用程序配置的最佳做法是什么?
- 27. 在Rails中管理动作按钮状态的最佳做法
- 28. 使用Rails生成静态CSS文件的最佳方法
- 29. 在Rails应用程序中处理大文件上传的最佳方法是什么?
- 30. cocos2dx中的最佳处理方法
代替存储在MongoDB中的CSS,为什么不将其存储在磁盘上的CSS文件在公共目录中的文件名是绑定到用户的ID?这样,你可以正常地服务于CSS(通过头部的链接标签)并利用浏览器缓存。无论何时进行更改,您都可以清除缓存并将基于编辑时间的缓存添加到链接标记src。 – 2011-01-18 21:38:49