Sqlite für Ruby 2.0.0 unter Windows

Update: Das neue Sqlite-Gem Version 1.3.8 enthält die ruby 2.0 Binaries für Windows. Daher ist der beschriebene Prozess nicht mehr notwendig.

Mit der neuesten Version von Ruby ist der Sqlite3 Support aus dem RubyInstaller entfallen. Um weiterhin einfach neue Rails Anwendungen testen zu können, ist es daher notwendig Sqlite3 für MinGW zu erstellen und das Gem zu installieren.

Sucht man danach im Netz gibt es zwar etliche Fragen in Foren, aber keine scheint immer richtig zu funktionieren. Hier versuche ich nicht nur zu erklären, was man tun muss, sondern auch warum die Schritte notwendig sind.

Vorraussetzungen

Ich habe das Tutorial mit folgenden Downloads durchprobiert:

Sqlite3 kompilieren

Zunächst brauchen wir die Sqlite3 Bibliothek passend für die MinGW Umgebung von unserer Ruby Installation. Diese wurde mit dem RubyInstaller von Ruby 1.9.3 mitgeliefert. Mit Ruby 2.0.0 müssen wir sie selbst erstellen.

Schritte:

  1. DevKit installieren(Zielverzeichnis für Console: c:\devkit\)
  2. Windows Console öffnen (Ich empfehle ConEmu)
  3. DevKit Build Umgebung initialisieren
    c:\devkit\devkitvars.bat
  4. Sqlite3 Quelltext entpacken (Alternativ: 7Zip oder PeaZip benutzen)
    tar -xzf sqlite-autoconf-3071700.tar.gz c:\
  5. In das Sqlite3 Verzeichnis wechseln
    cd c:\sqlite3
  6. Makefiles mit dem configure Skript erstellen (Achtung: Forward Slash)
    bash configure --prefix=c:/sqlite3
  7. Build ausführen:
    make install

Danach sollte es neue Unterverzeichnisse geben.

  • bin\
    • sqlite3.exe
    • libsqlite3-0.dll
  • lib\
    • libsqlite3.a
    • libsqlite3.dll.a
    • libsqlite3.la
  • include\
    • sqlite3.h
    • sqlite3ext.h

Sqlite3 RubyGem installieren

Bisher konnte man einfach mit gem install sqlite3 das passende RubyGem installieren. Das klappt mit Ruby 2.0.0 nicht mehr, da keine passende Native Extension in dem Gem vorhanden ist.

RubyGems wählt standardmäßig die MinGW Version des Sqlite3 Gems, die zunächst beim Installieren keine native Extension compiliert. Eine Möglichkeit ist als Plattform Ruby festzulegen und die passenden Parameter zum compilieren der Extension mitzugeben.

Schritte:

  1. Windows Console öffnen
  2. DevKit für Ruby Version verfügbar machen:
    ruby c:\devkit\dk.rb init; ruby c:\devkit\dk.rb setup
  3. Ruby Platform Gem mit Nativer Extension installieren (Achtung: Forward Slashes)
    gem install sqlite3 --platform=ruby --no-ri --no-rdoc -- --with-sqlite3-dir=c:/sqlite3 --with-sqlite3-lib=c:/sqlite3/lib

Anschließend sollte in dem Gem die folgende Datei vorhanden sein:
c:\ruby200\lib\ruby\gems\2.0.0\gems\sqlite3-1.3.7\lib\sqlite3\sqlite3_native.so

Erster Testlauf

Damit Ruby die Sqlite3 Bibliothek auch findet können wir entweder c:\sqlite3\bin zum System-Pfad hinzufügen, oder die Dateien von c:\sqlite3\bin\ nach c:\ruby200\bin kopieren. Letzteres entspricht dem Stand den Ruby 1.9.3 ausgeführt hatte.

Anschließend können wir es testen:

  1. Windows Console öffnen
  2. Ruby Umgebung starten
    irb
  3. Sqlite3 einbinden
    require 'sqlite3'

Das letzte Kommando sollte => true zurück liefern.

Bundler Kompatibilität

Immer wenn in einem Gemfile für Bundler sqlite3 erwähnt wird, versucht dieser das Sqlite3 Gem für MinGW zu installieren. Was dazu führt das es nicht funktioniert. Der MinGW Version fehlt die native Erweiterung für Ruby 2.0.0. Es gibt auch keine Möglichkeit die native Erweiterung mit diesem Gem zu bauen. Wir können die native Bibliothek aus der Ruby Version des Gems kopieren, sofern beide die gleiche Version haben.

MinGW Version des Gems patchen:

  1. Windows Console öffnen
  2. WinGW Version von sqlite installieren:
    gem install sqlite3 --no-ri --no-rdoc
  3. Die Datei sqlite3_native.so
    von c:\ruby200\lib\ruby\gems\2.0.0\gems\sqlite3-1.3.7\lib\sqlite3
    in c:\ruby200\lib\ruby\gems\2.0.0\gems\sqlite3-1.3.7-x86-mingw32\lib\sqlite3 kopieren.
  4. Ev. die Ruby Version des Gems löschen um das System aufzuräumen:
    gem uninstall sqlite3 --platform=ruby
    (Die sqlite3-1.3.7 auswählen)

Anschließend nochmal einen Testlauf durchführen.

Ich hoffe die Anleitung konnte einige Klarheit in dem Dschungel schaffen.

←zurück

© 2012 – 2024 HicknHack Software GmbH | Impressum | Datenschutzerklärung