Ruby Installer 3.0 « MinGW » et SQLite 3

Il n’est pas possible d’installer le gem sqlite3-ruby requis par Rails 2.x pour faire fonctionner une application “par défaut” si on utilise la version MinGW32 de Ruby packagée dans le projet Ruby Installer 3.0 pour Windows.

Alors il faut bidouiller un peu… en fait la modif est tellement simple qu’elle devrait pouvoir être intégrée directement à sqlite3-ruby ou à Ruby Installer puisqu’il sait d’ores et déjà récupérer des sources, les décompresser et les compiler lui-même…

Moi, compiler, ça m’amuse, alors on y va, même pas peur !

  • Mettez Rake à jour
    gem update rake
  • Installez MSysGit
  • Ouvrez la console Bash GIT (clic droit sur un dossier quelconque depuis l’explorateur Windows : Git Bash Here)
  • Clonez le dépôt de RubyInstaller
    mkdir source
    cd source
    git clone git://github.com/luislavena/rubyinstaller
  • Construisez Ruby Installer 3.0
    cd rubyinstaller
    rake CHEKCOUT=1
    rake package
  • Installez le package ‘devkit’ qui est dans sous répertoire “pkg”
  • Enlevez la variable d’environnement RUBYOPT (qui normalement vaut ’—rubygems’)
  • Modifiez la variable d’environnement PATH et changez ‘C:\Ruby…’ en ‘C:\Ruby18…’
  • Vérifiez en lancant Ruby depuis une console DOS
    C:\>ruby --version
    ruby 1.8.6 (2008-08-08 patchlevel 286) [i386-mingw32]
  • Tentez d’installer quelques gems
    gem install rails 
    gem install capistrano
    gem install merb datamapper sequel 
    gem install fastercvs 
    gem install haml 
    gem install hpricot 
    gem install oniguruma 
    gem install ruport prawn 
    gem install ultraviolet 
    gem install thin

    Mais le gem sqlite3-ruby, requis pour faire fonctionner une application Rails “par défaut” ne s’installera pas en version “native”, le gem étant préconfiguré pour les plateformes POSIX et même si l’installation de la version mswin32 est possible (avec l’option—platform mswin32), l’utiliser vous vaudra un message d’erreur disant que la version pour la plateforme ‘mswin32’ n’est pas compatible avec la version ‘mingw32’ qui est installée, d’autres gems comme mongrel, mongrel_cluster et d’autres dont la version native n’est pas installable mais qui sont livrés avec une version mswin32 précompilée fonctionnent.

    Donc il faut installer la version native. Mais elle ne compile pas. Alors il faut qu’elle compile… fastoche.

  • Récupérez le code de sqlite3-ruby depuis GitHub
    cd source
    git clone git://github/jamis/sqlite3-ruby
  • Récupérez aussi les Sources de SQLite3
  • Décompressez les fichiers dans sqlite3-ruby\ext\sqlite3-api
  • Récupérez la DLL de SQLite3 précompilée pour Windows
  • Décompressez les fichiers dans sqlite3-ruby\ext\sqlite3-api
  • Compilez l’extension
    cd sqlite3-ruby\ext\sqlite3-api
    ruby extconf.rb
    make

    Là vous devriez voir apparaître un fichier (LE fichier !) sqlite3_api.so

    Ensuite, l’alternative : gem ou pas gem ?

  • Gem : commencez par changer Gem::Platform::WIN32 en Gem::Platform::CURRENT dans le fichier sqlite3-ruby-win32.gemspec (RubyGems a changé...)
    cd ..\..
    # Vous devriez être dans 'source/sqlite3-ruby'
    gem build sqlite3-ruby-win32.gemspec
    gem install sqlite3-ruby-1.2.2-x86-mingw32.gem

    Attention ! Le Gem généré est énorme (plus de 2Mo !), c’est parce qu’il embarque tous les fichiers qui sont dans le sous-répertoire ext. Pour bien faire il faudrait encore modifier le gemspec pour qu’il ne prenne que les fichiers utile (les sources sqlite3-api-wrap.c et sqlite3-api.so, peut-être sqlite3.dll mais certainement pas les .o ni les sources de sqlite, sqlite3.c, sqlite3.h et sqlite3ext.h)

  • Pas Gem : les fichiers seront installés directement dans l’arborescence des extensions natives de Ruby (C:\Ruby18\lib\site_ruby)
    # Vous devriez être dans 'source/sqlite3-ruby'
    ruby setup.rb config
    ruby setup.rb setup
    ruby setup.rb install

    Voilà. Normalement vous avez de quoi utiliser SQLite3 !

    Be Sociable, Share!

Tags: , , ,

  1. Trackback from elchinas on 3 janvier 2009 at 16:40

Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *