Я изучаю проблему для обработки динамического css в приложении rails. В приложении отдельные пользователи и/или группы пользователей могут настраивать внешний вид, который выполняется через CSS. Не будет фиксированного количества "взглядов и чувств" или файлов css, число будет увеличиваться по мере роста числа пользователей и групп, а внешний вид пользователя определяется через интерфейс администратора приложения. В течение типичного дня будут поданы тысячи (не десятки тысяч) разных вариаций css. Приложение будет хранить предварительно построенный css в mongodb, поэтому там не придется платить цену на создание CSS для каждого запроса, вопрос в том, как лучше всего обслуживать этот динамический контент css. Я видел другие вопросы, такие как [этот] [1], которые говорят об использовании erb или sass, но некоторые из этих ответов датируются несколькими годами, поэтому я хотел убедиться, что с Rails 3 не было лучшего ответа.
Лучший способ обработки динамического css в приложении rails
Ответ 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 %>
очень простой способ управления макетами.
Ответ 3
Это может дать вам несколько идей: Несколько robots.txt для поддоменов в рельсах
Ответ 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 %>
}