Middleman live reload mit Vagrant

Geschrieben von everflux am Januar 31st, 2015

Middleman ist ein static site generator der sich einiges von Ruby-On-Rails leiht, aber eben nur statische Seiten generiert. In vielen Anwendungsfällen ist das auch genau das richtige.

Um die Web-Entwicklung zu erleichtern – vor allem auch mit mobilen Geräten – gibt es das vorzügliche Werkzeug „livereload“. Damit wird im Browser ein reload ausgelöst, wenn sich die Quellen geändert haben. Das spart Zeit und man muss nicht dauernd aus dem Texteditor oder der IDE raus um im Browser einen Reload manuell auszulösen. Zur Integration gibt es zum einen native Browser Extensions, zum anderen kann dies auch über ein JavaScript integriert werden.
Hinter den Kulissen nutzt livereload einen Websocket (ggf. mit Polyfill über Flash) um  den Client dann zu informieren.

Was liegt nun näher, als middleman als static site generator mit livereload zu verbinden. Am besten das ganze noch mit vagrant, so dass man eine isolierte Entwicklungsumgebung hat. Da vagrant mit VirtualBox arbeitet, kommt etwas mehr Komplexität auf einen zu. Der middleman läuft nun nicht mehr auf dem physischen Rechner sondern virtualisiert – damit hat er auch eine andere IP. Einzelne Ports koennen in die virtuelle vagrant Maschine reingereicht werden, das ist für das livereload wegen des Websockets schon mal wichtig. Dazu muss in der vagrant Konfiguration (Vagrantfile) folgender Eintrag vorhanden sein:

#middleman live reload port
config.vm.network :forwarded_port, host: 35729, guest: 35729

Jetzt muss middleman noch konfiguriert werden, dass es auch livereload verwendet:
Im Gemfile für middleman:

gem 'middleman-livereload'

In der middleman Konfigurationsdatei muss nun das livereload konfiguriert werden. Hier ist nun die Besonderheit: Das Livereload Plugin differenziert nicht zwischen der Host-Angabe um das Interface zu bestimmen an den der Websocket Server gebunden wird, und der URL die für den Zugriff auf den livereload Server verwendet wird. Gibt man hier „127.0.0.1“ an, bindet er nur an das lokale Interface in der virtuellen Maschine. Gleiches für „localhost“. Gibt man die externe IP des Hosts an, dann findet das rack-livereload das Interface nicht.

Da hilft als letztes nur noch das „Universalbinding“ – zum Glück ist das auch vom Browser nachher aufrufbar:

activate :livereload, :host => '0.0.0.0', :no_swf => true

Was in meinem Fall noch wichtig war: Das Assset hashing darf nicht ausserhalb der build Konfiguration aktiviert sein, andernfalls wird kein JavaScript beim Middleman-server injected.

Was nun noch wichtig ist: Das von VirtualBox verwendete Filesystem-Mounting unterstuetzt kein notify. Damit muss der middleman server zwingend den Polling-Modus verwenden:

middleman server --force-polling

Der einzige Wermutstropfen: Das funktioniert natürlich dann nur auf dem Entwicklungsrechner. Mit ipad oder Android Telefon im WLAN kommt man mit dem „0.0.0.0“ nicht weit. Aber immerhin funktioniert so das live reload mit vagrant.

Vagrant + Nginx/Apache: Korrupte Daten bei statischen Dateien

Geschrieben von everflux am Dezember 7th, 2013

Das hat echt eine Weile gedauert dieses Yak zu shaven: Dank Vagrant und VirtualBox habe ich ein Web-Projekt mit einer leicht zu startenden Entwicklungsumgebung versehen.

Das hat vorher auch schon prima geklappt, und das Verfahren hat sich bewährt – besonders, wenn das Setup etwas komplexer ist, oder es Entwickler gibt die nicht mit Linux/Debian/Ubuntu arbeiten. Jedoch hat mich heute ein Bug gequält den ich wirklich einige Stunden suchen durfte. Alles fing damit an, dass es JavaScript Fehler hagelte.

Uncaught SyntaxError: Unexpected token ILLEGAL

Jedoch nur, wenn die Datei aus Vagrant per nginx ausgeliefert wurde. Mit Netbeans und dem eingebauten mini-Webserver für HTML5 Projekte lief alles super.

Eine Google Suche brachte unglaublich viele Ergebnisse – jedoch keine Lösung. Man solle nach bösen Zeichen schauen, am besten nach Whitespace das komisch ist. Eine super Chance auf den Holzweg abzubiegen und da eine Weile unterwegs zu sein.

Die Quellcode-Ansicht von Firefox brachte dann erstaunliches zu Tage:

Screenshot from 2013-12-07 21:30:49

Das sieht in der Tat kaputt aus. Mal schnell im Editor schauen – nein da ist alles gut. Auf der Vagrant Maschine nachschauen, auch da alles in Ordnung. (Sowas in der Art hatte ich schonmal wenn die Guest-Additions von VirtualBox nicht mehr so recht zur Umgebung passen. Aber das war hier nicht der Fall.)

Auch das Einfügen von dummy-Text änderte weder etwas an dem Muell am Ende der Datei, noch wurde der Text angezeigt. Nanu, was kann das sein? Schnell noch einen Holzweg her! „Ist bestimmt Caching.“

Das Rätsels Lösung ist dann ein 5 Jahre alter Bug in VirtualBox, wohl auch bei Apache oder sogar Versionsverwaltungssoftware zuschlagen kann: VirtualBox hat Probleme mit direktem mmap zwischen zwei Filehandles, wenn es sich dabei um per vboxfs gemountete Verzeichnisse handelt.

Hier das Ticket dazu: https://www.virtualbox.org/ticket/819

Bei nginx kann man sendfile sehr einfach ausschalten:

sendfile off;

Danach klappt alles wie erwartet.

Oracle VirtualBox 3.2.4!

Geschrieben von everflux am Juni 14th, 2010

Oracle VirtualBox 3.2.4 ist verfügbar. Dabei handelt es sich um ein sogenanntes Maintenance Relase, es wurden Geschwindikeits- und Qualitätsverbesserungen vorgenommen.
Das offizielle Changelog ist hier verfügbar, der Download von www.virtualbox.org.

VirtualBox eignet sich weiterhin als eine schnelle und kostenfreie Virtualisierungs-Lösung, um Software gefahrlos auszuprobieren, oder andere Betriebssysteme als auf dem Host zu verwenden. So kann man z.B. einen Blick auf OpenSolaris oder Nexenta werfen, und darauf seine Anwendungen testen oder Erfahrung sammeln.

Für OpenSolaris gab es vor ca. einer Woche wieder Aktualisierungen im dev Repository, so dass ich davon ausgehe, dass auch hier Oracle die Weiterentwicklung voran treibt.

Ubuntu Lucid Virtualbox: VERR_SUPDRV_COMPONENT_NOT_FOUND

Geschrieben von everflux am Mai 3rd, 2010

Wenn nach dem Update auf Ubuntu Lucid SunVirtualBox (bzw. Oracle VirtualBox) nicht mehr korrekt startet, so fehlt vermutlich das richtige Kernel Modul. (Das sollte per dkms eigentlich erstellt und automatisch gepflegt werden, aber sowas kann schonmal schief gehen.)

Die Fehlermeldung bei mir war VERR_SUPDRV_COMPONENT_NOT_FOUND – und ein modprobe auf vboxnetflt hat in der Tat gemeldete, dass kein entsprechendes Modul vorhanden sei.

Und Abhilfe damit VirtualBox auch mit Ubuntu Lucid wieder startet gibt es auch: sudo /etc/init.d/vboxdrv setup
(Bitte machen, ohne dass VirtualBox bzw. die GUI gestartet ist.) Danach kann man einfach VirtualBox wie gewohnt starten. (Hinweis: Ich nutze dabei nicht die OpenSource VirtualBox Version von Ubuntu/Canonical, sondern die Repos von virtualbox.org – evtl. gibt es hier kleinere Unterschiede.)

iTunes funktioniert nicht mehr

Geschrieben von everflux am März 6th, 2010

„itunes funktioniert nicht mehr“ – diese Meldung kann einen in den Wahnsinn treiben. Ich dachte erst das „itunes funktioniert nicht mehr“ läge an Windows 7, oder einem Windows Update. Oder gar einem Trojaner oder Malware auf dem Windows System. (Ich kenne mich mit Windows nicht so gut aus, da traue ich dem alles zu.) Und ich habe alles versucht, itunes wieder zum laufen zu bringen:

  • iTunes neu installiert
  • Windows 7 „letzte funktionierende Konfiguration / Systemwiederherstellung
  • cclean, Antivirus Software laufen lassen
  • genervt Windows 7 komplett neu installiert

Und stets kommt direkt nach dem Starten von iTunes die Windows Fehlermeldung „iTunes funktioniert nicht mehr“ – trotz Neuinstallation!

Genervt habe ich dann Windows XP installiert. Doch meine Zuversicht war zu früh: Auch hier wurde iTunes mit der Fehlermeldung „iTunes funktioniert nicht mehr“ einfach von Windows beendet.

Die Lösung für das Problem war dann doch etwas einfacher, als zuerst gedacht. Zunächst musste ich auf die Idee kommen, dass das iTunes Problem mit dem Rest der Systemkonfiguration zu tun haben musste. Der Verdacht viel nun auf VirtualBox, denn iTunes funktionierte weder unter Windows XP noch unter Windows 7 korrekt.

(Ich benutze schon lange kein Windows mehr direkt, einer der wenigen Gruende für Windows ist eben iTunes für keinen ipod bzw. ipod Touch.) Oder mein Ubuntu Host für die VirtualBox mit iTunes könnte Schuld sein – sollte irgendein Ubuntu Update mir die VirtualBox oder iTunes beschädigt haben> Weiterlesen »

VirtualBox 3.1: Live Migration und Snapshot Komfort

Geschrieben von everflux am November 30th, 2009

Sun hat VirtualBox 3.1 als Produktivversion freigegeben. Neu und interessant sind vor allem Live Migration – „Teleportation“ – von virtuellen Maschinen. D.h. eine Instanz einer virtuellen Maschine kann im Betrieb umgezogen werden. Auch verbessert wurde die Geschwindigkeit im 2d Bereich und für AMD 64 Gastsysteme. Für viele interessant sein dürfte auch ein flexiblerer Umgang mit Snapshots, so kann ein beliebiger Snapshot Stand verwendet werden – ein Feature, das viele Vmware User bei VirtualBox vermisst haben.

EFI als Bios Ersatz wurde ebenfalls in einer ersten experimentellen Version implementiert. Alle Neuerungen und mehr Details finden sich im umfangreichen Changelog von VirtualBox.

Wie üblich finden sich Downloads von VirtualBox für verschiedene Plattformen auf der Homepage von VirtualBox: http://www.virtualbox.org/

Für Ubuntu User gibt es wie üblich die Möglichkeit komfortabel über den Paketmanager zu installieren.
Ein Upgrade auf die neue Version erfolgt genauso wie die Erstinstallation per „sudo apt-get install virtualbox-3.1“ nachdem man das Virtualbox Repository angelegt hat.

VirtualBox 3.1: EFI! Direct3d! Mehr…

Geschrieben von everflux am November 13th, 2009

Sun hat eine erste Betaversion von VirtualBox 3.1 freigegeben. Das Changelog von VirtualBox 3.1 ließt sich schonmal gut:

VM states can now be restored from arbitrary snapshots instead of only the last one, and new snapshots can be taken from other snapshots as well (aka branched
snapshots)

  • Netzwerkmodus kann im Betrieb geändert werden
  • OpenSolaris Host USB Support, der von den
    Verbesserungen im USB Stack ab Nevada build 124 Nutzen zieht (experimentell)
  • Deutliche Geschwindigkeitsverbesserungen von VirtualBox bei PAE und AMD64 Gastsystemen (Hardwarevirtualisierung ohne nested paging)
  • Experimenteller Support für EFI Firmware, statt BIOS
  • Support für Hardware 2d und 3d Beschleunigung (OpenGL und Direct3d)

Weiterlesen »

VirtualBox 3.0.2 – mit Linux „blackscreen“ Fix

Geschrieben von everflux am Juli 11th, 2009

VirtualBox 3.0.2 ist freigegeben worden und enthält eine Menge Bugfixes. Insbesondere der für mich unter Ubuntu Jaunty (mit ATI Grafikkarte) auftretende Fehler mit den durchsichtigen oder komplett schwarzen Fenstern ist behoben worden.

Bisher half lediglich ein Starten von VirtualBox unter Ubuntu Jaunty mit „env XLIB_SKIP_ARGB_VISUALS=1" was aber etwas umständlich ist. Die neue VirtualBox 3.0.2 Version gibts auf http://www.virtualbox.org/ oder über den Ubuntu / Debian Paketmanager wie gewohnt per
apt-get install virtualbox-3.0

VirtualBox 3.0

Geschrieben von everflux am Juni 30th, 2009

Sun beeilt sich derzeit mit den Veröffentlichungen – nach Netbeans 6.7 ist nun VirtualBox 3.0 für den produktiven Betrieb freigegeben worden. Eine List der Neuerungen findet sich im VirtualBox changelog. Der Download ist auf der VirtualBox Download Seite für verschiedene Betriebssysteme verfügbar.

Neben vielen Bugfixes und überarbeitetem 3d Support (Direct 3d 8/9) dürfte die Virtualisierung von Mehrkernprozessoren bzw. Multi-CPU Maschinen interessant sein. Auch der USB Support wurde erweitert und unterstützt jetzt highspeed isochronous endpoints.

JavaOne 2009

Geschrieben von everflux am Juni 17th, 2009

Zurück von der JavaOne 2009 – und jetzt möchten alle wissen „wie war es“. „Anders als erwartet“. Die großen Ankündigungen fehlten mir dann doch etwas – vom Hocker gehauen haben mich diesmal mehr die Partys und socialising als die General Sessions.

Auch dem Pavillion habe ich dieses Jahr deutlich mehr Zeit als im letzten eingeräumt, und so eine Menge interessanter Gespräche geführt. Starkes Augenmerk habe ich auf Tipps und Erfahrungsberichte zum Thema User-Group-Building gerichtet, doch auch OpenSolaris und VirtualBox bekamen verdiente Aufmerksamkeit. Java selbst war in so fern weniger in meinem Fokus als das „drumherum“. Auch die Neuerungen die Sun für den „Sun certified Java Programmer plus“ einführen möchte, konnte ich eingehend anschauen. Hierzu kann ich nur sagen: Klasse Idee, ich bin gespannt wie die Umsetzung wird.

Dass sich auch ein Talk der CommunityOne mit „Ubuntu in the clouds“ beschäftigte, in dem Ubuntu One und die weitere Strategie von Canonical für Ubuntu und Cloudcomputing erörtert wurde fand ich sehr angenehm. Das zeigt, dass Sun sich hier wirklich offen gibt. (Hier könnte sich der OpenSolaris Produktmanager auch noch abgucken OpenSolaris security updates zur freien Verfügung zu stellen, und schon könnte OpenSolaris eine interessante Alternative zu Ubuntu auch für den tatsächlichen Einsatz werden.)

Schade, dass es Netbeans nicht zur JavaOne mit einem 6.7 Release geschafft hat – aber lieber einen RC als einen Flickenteppich.

Für alle an den Sessions interessierten: Die JavaOne 2009 Slides sind bei Sun online einsehbar, die aufgezeichneten Sessions folgen vermutlich in Kürze.

Wer Lust hat, beim die Münsteraner Java User Group beim Java Stammtisch zu besuchen sei hiermit herzlich dazu eingeladen.


http://everflux.de/
Copyright © 2007, 2008 everflux. Alle Rechte vorbehalten. All rights reserved.