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.
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
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
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