Подтвердить что ты не робот

Лучший способ обработки динамического css в приложении rails

Я изучаю проблему для обработки динамического css в приложении rails. В приложении отдельные пользователи и/или группы пользователей могут настраивать внешний вид, который выполняется через CSS. Не будет фиксированного количества "взглядов и чувств" или файлов css, число будет увеличиваться по мере роста числа пользователей и групп, а внешний вид пользователя определяется через интерфейс администратора приложения. В течение типичного дня будут поданы тысячи (не десятки тысяч) разных вариаций css. Приложение будет хранить предварительно построенный css в mongodb, поэтому там не придется платить цену на создание CSS для каждого запроса, вопрос в том, как лучше всего обслуживать этот динамический контент css. Я видел другие вопросы, такие как [этот] [1], которые говорят об использовании erb или sass, но некоторые из этих ответов датируются несколькими годами, поэтому я хотел убедиться, что с Rails 3 не было лучшего ответа.

4b9b3361

Ответ 1

Вы можете обрабатывать ваши файлы CSS как ресурсы, хранить их в базе данных и обслуживать их с помощью кеширование страниц, так что вам нужно только ударить db один раз при изменении CSS. Все последующие запросы будут обслуживаться непосредственно веб-сервером из кеша, не касаясь вашего приложения или 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" />

Ответ 2

Хорошо, я работал с этим пару раз, но они определенно не исправили никаких файлов CSS на выбор. Его должно быть больше или меньше.

Одной из вещей, которые я использовал, были блоки content_for. В основном

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

И в макете

<%=  yield :css %>
 

очень простой способ управления макетами.

Ответ 4

У меня была аналогичная проблема, но мне нужно было только один раз модифицировать CSS. Я храню пару констант в модуле "Сайт", который затем я могу использовать как константы в CSS или как константы в приложении Rails. Я автоматически генерирую файлы CSS всякий раз, когда приложение Rails перезапускается, и файлы ввода CSS были изменены.

Вы можете сделать что-то подобное, но ссылаться на символические имена в site_settings.rb и затем извлекать их для каждого пользователя из MongoDB

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

Ответ 5

Теперь скажем, что у вас есть динамический стиль, называемый dynamic.css.scss.erb(в конце это очень важно!) в app/assets/stylesheets. Он будет обработан erb (а затем Sass) и, как таковой, может содержать такие вещи, как

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

}