Dynamisches CSS in der Rails-Asset-Pipeline, kompilieren on fly

8

Ich baue eine Website in Rails 3.2. Es ist 3 Jahre her, seit ich Rails oder Ruby berührte, also bin ich auf beiden rostig, und das letzte Mal, als ich Schienen benutzte, war Rails 2.3. Unnötig zu sagen, bitte entschuldigen Sie "einfache" Fragen unten.

Hier sind die Spezifikationen

  • Multi Tennant CMS / Shop-Website
  • Jeder "Store" (auch Subdomain genannt) kann durch CSS-Anpassungen sein eigenes Aussehen, Verhalten usw. haben
    • Die Anpassungen können in einer Benutzeroberfläche in der App durchgeführt werden, sodass der Benutzer grundlegende Bootstrap-Variablen ändern kann (d. h. @textColor , @bodyBackground usw.)
  • Ich benutze den less-rails-bootstrap Edelstein zum Twitter Bootstrap Look / Feel, etc.

Hier sind die Herausforderungen

  1. Ich muss in der Lage sein, die Variablen für das CSS dynamisch in eine Datei auszugeben, die in Bootstrap eingemischt wird, so dass die Variablen ausgewählt werden, um das endgültige CSS zu erstellen
  2. Wenn ein Benutzer eine Variable für das CSS ändert, wird der vorhandene Stil grundsätzlich ungültig. Ich brauche das komplette CSS, das neu kompiliert und auf die Festplatte, den Speicher-Stream oder an einen anderen Ort zurückgeschrieben wurde, wo ich es in die Finger kriegen kann (denken Sie daran, dass less verwendet wird)
  3. Ich brauche ein anderes CSS, um es pro Sub-Domain auszuspucken. Irgendwelche Vorschläge, wie man das angeht?

Die Sache noch komplizierter ...

... vorausgesetzt, dass ich im Grunde einen Weg finden muss, das CSS spontan zu kompilieren, das bedeutet, dass ich GEMS einschließen muss, würde ich normalerweise nicht in einer Produktionsumgebung. Leistung wird sehr wichtig sein. Gibt es eine Möglichkeit, dies zu isolieren? Sobald das CSS ungültig gemacht und neu generiert wurde, konnte ich den Inhalt nehmen und entweder auf Festplatte schreiben oder in einigen memcached / redis / etc speichern. Instanz für die Leistung.

Irgendwelche Kommentare, selbst wenn sie mich nur in eine allgemeine Richtung weisen würden, wären willkommen.

Danke!

    
Ryan Griffith 13.12.2012, 13:48
quelle

1 Antwort

3

Hier ist die Lösung, auf die ich endlich gelandet bin:

  • Ich bin dann zu bootstrap-sass gewechselt anstatt Ссылка
  • Ich habe die folgenden Änderungen an meiner application.rb -Datei vorgenommen, um sicherzustellen, dass die Gruppe :asset trotz der Umgebung immer eingeschlossen ist:

    %Vor%
  • Verwendet die Konzepte von Manuel Meure (Danke Manuel!) von Kraut Computing gefunden bei Ссылка .

    • Ich habe einige Anpassungen vorgenommen, um meinen eigenen Bedürfnissen gerecht zu werden, aber die Kernkonzepte von Manuel waren die Grundlage für meinen Erstellungsprozess.
  • In meinem Modell (wir nennen es " Site ") habe ich ein Code-Snippet, das folgendermaßen aussieht:

    %Vor%

Ich hoffe, das hilft. Ich weiß, es ist eine Abweichung vom ursprünglichen Beitrag, aber es ist davon abgewichen, weil dies die am besten erreichbare Lösung für das Problem schien.

Wenn ich eine bestimmte Frage, die Sie haben, nicht beantwortet habe, können Sie mich gerne kommentieren, damit ich sie erweitern kann.

Danke!

    
Ryan Griffith 26.02.2013, 15:03
quelle