Wie können Sie Fehler in der Rails-Asset-Pipeline vor der Produktion feststellen?

8

Ich habe mich gerade mit Rails 3.1 vertraut gemacht und einige Zeit damit verbracht, ein altes Projekt zu aktualisieren und herauszufinden, wie sich die neue Asset-Pipeline im Entwicklungsmodus im Vergleich zur Produktion verhält.

Die Standardeinstellung config.assets.precompile segnet nur application.css und application.js , mit der Absicht, dass alles als einzelnes Stylesheet und als einzelne JavaScript-Datei bereitgestellt werden soll .

Offensichtlich gibt es Situationen, in denen wir das nicht wollen, also können wir der Liste in dieser Konfigurationsvariablen Elemente hinzufügen ...

Hier ist die Situation, die ich bei der Produktion mit meinem Sandbox-Projekt hatte:

  1. Durchsuchen Sie die Website in der Entwicklung, sah, dass alles funktionierte. Die Assets wurden als separate Dateien verknüpft und die Site korrekt angezeigt.
  2. Ich habe die Site auf meinen Server hochgeladen und versucht, sie in der Produktion zu verwenden. Der erste Fehler war, dass "ie.css" (ein bedingtes Stylesheet) nicht vorkompiliert wurde. (Ich war in Safari und dieses Stylesheet wurde nicht einmal heruntergeladen: Der Fehler wurde vor dem Rendern der Seite vom Helfer stylesheet_link_tag ausgelöst.)
  3. Ran rake assets:precompile und erneut versucht.
  4. Das problematische Objekt wurde zu config.assets.precompile hinzugefügt und erneut versucht.
  5. Der Fehler wurde bis zum Eintreten eines anderen Asset-Fehlers verringert.
  6. GOTO 3.

Da ich nicht wusste, wie ich das angehen sollte, ging ich ein paar Mal im Kreis herum, bis ich dachte, ich hätte alle Assets und die Site lief in der Produktion. Dann habe ich es in MSIE versucht und einen weiteren Fehler 500 getroffen: "verspäteter_png_fix.js" wurde bedingt geladen, und es ist bis dahin nicht aufgetaucht.

Also meine Frage ist, abgesehen von Versuch und Irrtum oder einer starken Abhängigkeit von Integrationstests, wie kann ich vorhersagen, dass meine Site nicht bombardiert wird, wenn die Asset-Pipeline entdeckt, dass einige Stylesheets oder Javascript nicht hinzugefügt wurden die Vorkompilierungsliste?

Ich bin auch neugierig, warum ein fehlendes Stylesheet-Asset die gesamte Seite auf Fehler 500 bringen sollte, anstatt es nur bei Bedarf zu kompilieren oder 404 zu liefern, wenn dieses Asset angefordert wird. Ist dies ein bewusster Entwurf, um früh zu versagen?

    
Andrew Vit 02.09.2011, 02:28
quelle

4 Antworten

2

Ich habe gerade ein Juwel namens assets_precompile_enforcer veröffentlicht, das sicherstellt, dass Entwickler nicht vergessen, Assets zu config.assets.precompile hinzuzufügen. während sie sich entwickeln. Eine Ausnahme wird ausgelöst, wenn Sie ein Asset über javascript_include_tag oder stylesheet_link_tag hinzufügen und es nicht mit einem Filter in config.assets.precompile übereinstimmt.

Dies bedeutet, dass Asset-Fehler während der Entwicklung abgefangen werden, anstatt nach der Bereitstellung in der Produktion entdeckt zu werden.

    
ndbroadbent 10.12.2012 23:57
quelle
1

Ich hatte ähnliche Probleme mit Schienen 3.1. Das Beste, was Sie tun können, ist, capistrano multi stage zu installieren und einen Staging-Server zu erhalten.

Wenn dies aus irgendwelchen Gründen nicht möglich ist, installieren Sie eine virtuelle Maschine auf Ihrem Computer und versuchen Sie, Ihre Serverumgebung zu replizieren.

    
vise 09.09.2011 19:34
quelle
1

Kontinuierliche Deployment ist eine großartige Sache, und Sie sollten zu dem Punkt kommen, wo es so einfach ist, dass es wirklich nicht so schmerzhaft ist. Das heißt, config.assets.precompile kann Regexs nehmen. Wie wäre es also mit einem Standard für die "manifesten" Dateien auf der obersten Ebene der Ritzel oder einem Standard-Unterordner für Dinge, die nicht gebündelt werden? (beachte, dass ich das bisher noch nicht probiert habe ...)

    
Matt Briggs 15.09.2011 04:54
quelle
0

Das mag übertrieben sein, aber das funktioniert für mich (es gibt mir saubere, kompilierte Assets). Ich habe dies in meiner .bash_profile Datei.

%Vor%

und dies in meiner config / environments / production.rb (zwingt die Produktion, wenn nötig zu kompilieren; sollte nicht nötig sein, wenn ich mich daran erinnere, zuerst "ggo" auszuführen):

%Vor%

Also, mein Workflow ist: 1. Code 2. Git hinzufügen & amp; git commit 3. Wenn ich CSS / SASS / JS / CoffeeScript-Dateien berührte, starte ich ggo. Ansonsten mache ich eine normale Cap-Bereitstellung.

    
jschorr 15.09.2011 04:42
quelle