J'ai trouvé mysql2 gem . Cela fonctionne très bien avec l'encodage Ruby 1.9 et utf8 (par opposition à mysql gem).
Mais j'ai des doutes. Est-ce que quelqu'un utilise ce bijou dans la production? Qu'en est-il du test de performance? Est-ce plus rapide que mysql gem? Est-ce stable?
mysql2
est conçu comme un remplacement plus moderne pour la gemme mysql
existante, obsolète depuis un certain temps. J'ai aussi entendu dire que l'auteur ne le supportait plus et recommande à tout le monde d'utiliser sa version pure-Ruby car elle est compatible avec d'autres implémentations de Ruby (mais est much slow).
Le premier problème avec la gemme mysql
est qu’il ne fait pas de transtypage de caractères en C, il vous restitue des chaînes Ruby que vous devez ensuite convertir en types de Ruby appropriés. Faire cela en pure Ruby est extrêmement lent et crée des objets sur le tas qui n'ont jamais eu besoin d'exister. Et comme nous le savons tous, le GC de Ruby est la principale raison de sa lenteur. Il est donc préférable de l'éviter et de faire autant que possible en C pur.
Deuxièmement, il bloque le entier Ruby VM lors de la connexion, de l’envoi de requêtes et de l’attente de réponses, voire de la fermeture de la connexion. mysqlplus
aide définitivement à résoudre ce problème, mais uniquement pour l'envoi de requêtes, pour autant que je sache.
mysql2
vise à résoudre ces problèmes tout en conservant une API extrêmement simple. Eric Wong
(auteur de Unicorn) a fourni des correctifs impressionnants qui rendent presque tout non bloquant et/ou publient la GVL en Ruby. La classe Mysql2::Result
implémente Enumerable, donc si vous savez utiliser un tableau, vous savez comment l'utiliser.
Je ne connais que quelques personnes l'utilisant actuellement en production, mais il est également en cours d'évaluation sur Twitter, WorkingPoint et UserVoice.
Je suis également en pourparlers avec Yehuda
sur le fait qu'il soit recommandé/par défaut pour Rails 3 lors de son expédition. Certaines de ses techniques et optimisations vont également être bientôt intégrées au pilote do_mysql
de DataObjects.
Le pilote ActiveRecord devrait être assez solide pour le moment. Tout ce que vous devez faire est d'installer la gemme et de changer le nom de votre adaptateur dans database.yml en mysql2
.
Si vous êtes intéressé à l'utiliser, essayez-le. Je suis rapide à Push correctifs si vous trouvez des problèmes;)
mysql2 est maintenant la valeur par défaut dans Rails 3
Un peu en retard - mais j'utilise mysql2 en production sur plusieurs sites et le trouve très stable car certains problèmes de fermeture de connexions ont été résolus il y a quelques semaines.
Si quelqu'un souhaite utiliser la gem mysql au lieu de la gem mysql2 dans Rails 3.0.0 pour Windows, j'ai écrit un court article qui explique comment modifier le générateur d'applications Rails .
Assurez-vous de convertir vos caractères 'latin1' en 'utf8', en suivant la réponse ci-dessous:
Problèmes UTF8 MySQL sur Rails - problèmes d'encodage avec utf8_general_ci
Pour votre information, lors de l'utilisation de mysql2 (0.2.x) avec Rails 3.0.11, j'ai dû rétrograder ma version de RubyGems de la version 1.8.15 à la version 1.8.10. Sinon passager barfs ...