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 !

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 !

Parlez-en !
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • LinkedIn
  • Google
  • Live
  • Technorati
  • E-mail this story to a friend!
  • Print this article!

Tags: , , ,