2010-03-05 6 views
1

Sur le système de mon hébergeur, installer et utiliser des gemmes semble nécessiter l'installation de ma propre copie de ruby. Avec leur aide sur un forum, je l'ai fait. J'essaie d'utiliser une gemme particulière (Image Science) dans une application Rails.Comment créer une gemme ruby ​​disponible pour mes scripts?

À ce stade, si j'ouvre irb et tapez ce qui suit, voici ce que je reçois:

require 'rubygems' #true 
require 'image_science' #LoadError: libfreeimage.so.3: cannot open shared 
         #object file: No such file or directory (etc).... 

Sur les conseils de l'hôte, je retourne à bash et tapez ceci:

export LD_LIBRARY_PATH=~/ruby1.8/lib 

Cette commande permet à irb d'exiger image_science - elle renvoie 'true'. Si je comprends bien, il dit, "hé, regardez aussi dans ce répertoire pour les gemmes."

Le problème est que cela ne change pas ce à quoi mes scripts Ruby peuvent accéder. (Il ne persiste que pour la session, mais je suppose que je peux l'ajouter à mon .bashrc.) Dans mon application Rails, je reçois toujours une erreur si j'essaie d'exiger cette gemme.

J'ai deux des questions:

  1. Comment puis-je faire ce petit bijou à la disposition de mes scripts Ruby - Plus précisément, un fichier modèle Rails?
  2. Dois-je même besoin de mettre la commande "require" dans le fichier modèle, ou y a-t-il un autre moyen de charger la gem?
+1

LD_LIBRARY_PATH est utilisé pour localiser des bibliothèques partagées - L'un d'entre eux est une dépendance pour la gemme de la science de l'image. Il existe d'autres variables d'environnement pour spécifier les emplacements de gemme réels. –

Répondre

2

Si la gemme ne va être utilisée que par un seul modèle, je demande généralement simplement 'gem' sur ce modèle. Si l'application va utiliser la gemme, disons dans la vue ou un contrôleur, je crée un fichier appelé app.rb et je le colle dans config/initializers qui inclut toutes les instructions require. Vous pouvez également inclure dans config/environment.rb, à l'intérieur du bloc initialiseur:

config.gem 'pg', :lib => 'pg' 

qui exigera la perle avant le chargement du projet, cependant, j'ai eu du mal avec cela avec certaines pierres précieuses, comme les facettes de rubis .

Pour LD_LIBRARY_PATH, mettre cela dans l'un des config/environnements/*. Fichiers rb (personnaliser pour vos environnements, mais le développement est très probablement différente de la production)

ENV['LD_LIBRARY_PATH'] = "#{ENV['LD_LIBRARY_PATH']}:#{ENV['JAVA_HOME']}/jre/lib/amd64:#{ENV['JAVA_HOME']}/jre/lib/amd64/server" 
+0

Donc, il s'agit d'une liste d'emplacements séparés par deux-points, et je devrais ajouter celui ci-dessus? –

+0

J'ai essayé ceci: 'ENV ['LD_LIBRARY_PATH'] =" # {ENV ['LD_LIBRARY_PATH']}: ~/ruby1.8/lib "' Aucun changement jusqu'à présent. C'est sur une machine Linux. –

+0

essayez-le avec le chemin absolu vers la bibliothèque, pas le ~ – igkins

Questions connexes