2010-09-14 5 views
2

J'ai récemment installé JRuby et la gemme Thrift après l'avoir utilisé en IRM. Je suis confronté à un problème où, si j'ai besoin de 'thrift', je reçois le message "Impossible de charger l'extension thrift_native, par défaut pour les bibliothèques Ruby." Si j'essaie alors et exige l'économie de code générée dans ruby ​​j'obtiendrai cette erreur: "NameError: constante non initialisée Thrift :: Struct_Union"Thrift gem et JRuby

Est-ce que la gemme d'épargne ne fonctionne pas actuellement avec JRuby?

Y at-il quelque chose que je peux faire pour utiliser l'épargne avec JRuby en plus d'utiliser la gemme?

EDIT: Après avoir creusé sur mon mac, j'ai trouvé que la gem MRI et JRuby gem sont différents même si les gemmes sont la même version (0.2.0.4). Maintenant, cela semble être une idée terrible, mais si vous copiez les fichiers .rb de la gem MRI dans la gemme JRuby et ajouter require 'thrift/struct_union' à thrift.rb, vous ne recevrez plus d'erreurs liées à la gemme Thrift, sauf qu'il ne peut pas trouver thirft_native et utilisera des bibliothèques Ruby pures. Ceci peut être expliqué car thrift_native est fait pour C pas Java.

Répondre

1

Lorsque vous utilisez déjà JRuby, j'utiliserais un client d'épargne natif Java. Pour moi, l'épargne était la raison de passer à JRuby en premier lieu, puisque l'implémentation de Ruby est plutôt lente et boguée.

+0

Voulez-vous dire de ne pas utiliser la gemme et de construire l'épargne pour Java? Pouvez-vous toujours y accéder depuis Ruby? – Aaron

+0

Cela dépend de l'endroit où vous utilisez thrift, mais s'il y a un bon client Java pour l'application à laquelle vous vous connectez, j'utiliserais certainement un client Java en faveur d'un client Ruby quand il s'agit de l'épargne. La beauté de JRuby est qu'il est si facile d'utiliser le code Java natif. Par exemple, j'utilise Hector pour me connecter à Cassandra, mais je l'appelle depuis une application Ruby. – xinit

+0

Est-ce que c'est encore vrai? C'est-à-dire: Restez à l'écart de la gemme d'épargne Ruby (si vous utilisez JRuby et exécutez un vrai serveur multithread comme Puma ou Phusion Passenger) et utilisez un client d'épargne natif Java à la place? Merci pour vos commentaires, @xinit ou Aaron ou quelqu'un d'autre. – likethesky