Monday, January 4, 2010

Ruby 1.9, SQLite et UTF-8

Comme abordé précédemment dans le billet Migrer vers Ruby 1.9, le gem sqlite3-ruby actuel (version 1.2.5) ne fonctionne pas vraiment avec des données UTF-8.

Un fork de la version 1.2.4 qui corrige ces problèmes est disponible ici: http://github.com/qoobaa/sqlite3-ruby.

Pour l'installer, clonez d'abord le repository avec git:

git clone git://github.com/qoobaa/sqlite3-ruby.git

puis allez dans le répertoire créé et construisez le gem:

cd sqlite3-ruby
gem build sqlite3-ruby.gemspec

si tout fonctionne vous avez maintenant le gem sqlite3-ruby-1.2.6.gem. Installez-le:

gem install sqlite3-ruby-1.2.6.gem 

C'est tout pour Linux, sous Windows cela se complique étant donné que le gem intègre une extension C qu'il faut linker avec SQLite. Vous devriez donc tomber sur l'erreur:

Building native extensions.  This could take a while...
ERROR:  Error installing sqlite3-ruby:
        ERROR: Failed to build gem native extension.

ou si vous avec déjà installé le devkit:

checking for sqlite3.h... no

La suite nécessite d'avoir le devkit d'installé sur votre machine (voir http://rubyinstaller.org/download.html et http://wiki.github.com/oneclick/rubyinstaller/development-kit ).

Créez un répertoire qui contiendra les fichiers nécessaires à la compilation de l'extension, à savoir sqlite3.h (dans le sous-répertoire include) et sqlite3.dll (dans le sous-répertoire lib). Par exemple:

C:\Ruby19\sqlite3
            |- include
            |   |- sqlite3.h
            |- lib
                |- sqlite3.dll 

Le fichier sqlite3.h se trouve dans les sources de SQLite: http://www.sqlite.org/sqlite-amalgamation-3_6_21.zip

Le fichier sqlite3.dll se trouve dans la distribution binaire pour Windows: http://www.sqlite.org/sqlitedll-3_6_22.zip

Modifiez ensuite la configuration de la compilation de l'extension pour inclure le répertoire créé. Ouvrez le fichier ext/sqlite3_api/extconf.rb des sources du gem et ajoutez la ligne suivante:

dir_config("sqlite3", "C:\\Ruby19\\sqlite3")

Vous pouvez maintenant regénérer le gem et l'installer:

gem build sqlite3-ruby.gemspec
gem install sqlite3-ruby-1.2.6.gem 

1 comment:

  1. Excellent ce billet !
    J'ai des soucis d'encodage avec sqlite3 et ruby 1.9.1 et ce post m'a aider à trouver une solution à mon problème.

    Seulement, je me pose une question : y a t-il un quelconque moyen de récupérer directement le gem buildé pour windows ?

    Merci encore pour ce billet en tout cas.

    ReplyDelete