2008-09-25 3 views

Répondre

38

Il n'y a pas de norme pour ce que le fichier que vous devez inclure est. Cependant, il y a certaines conventions généralement suivies que vous pouvez essayer pouvez suivre et utiliser:

  • Souvent, le fichier est appelé le même nom comme le joyau. Donc require mygem fonctionnera.
  • Souvent, le fichier est le seul fichier .rb dans le répertoire lib sous-répertoire de la pierre précieuse, donc si vous pouvez obtenir le nom de la gemme (peut-être vous itterating par fournisseurs/pierres précieuses dans un 2.1 pré rails projet), vous pouvez consulter #{gemname}/lib pour les fichiers .rb et s'il n'y a qu'un seul, son joli à parier que est celui d'exiger

Si tout cela fonctionne, tout ce que vous pouvez faire est de regarder dans le répertoire de la gemme (que vous pouvez trouver en exécutant gem environment | grep INSTALLATION | awk '{print $4}' et en regardant dans le répertoire lib, vous aurez probablement besoin de lire les fichiers et j'espère qu'il ya un commentaire expliquant quoi faire

3

Vous devez inclure « rubygems » que si vous avez installé le bijou à l'aide bijou. Sinon, l'incantation secrète serait de lancer irb et d'essayer différentes combinaisons. En outre, vous pouvez passer l'option -I à l'interpréteur ruby ​​afin que vous incluiez le répertoire d'installation de la gemme, dans le LOAD_PATH. Notez que $ LOAD_PATH est un tableau, ce qui signifie que vous pouvez ajouter des répertoires à partir de votre script.

10

Le require doit correspondre à un fichier dans le chemin de ruby. Vous pouvez savoir où les pierres précieuses sont installés en exécutant « environnement de pierres précieuses » (chercher répertoire d'installation):

[email protected]:~$ gem environment 
RubyGems Environment: 
    - RUBYGEMS VERSION: 1.2.0 
    - RUBY VERSION: 1.8.7 (2008-08-08 patchlevel 71) [i686-linux] 
    - INSTALLATION DIRECTORY: /usr/local/ruby/lib/ruby/gems/1.8 
    - RUBY EXECUTABLE: /usr/local/ruby/bin/ruby 
    - EXECUTABLE DIRECTORY: /usr/local/ruby/bin 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - x86-linux 
    - GEM PATHS: 
    - /usr/local/ruby/lib/ruby/gems/1.8 
    - GEM CONFIGURATION: 
    - :update_sources => true 
    - :verbose => true 
    - :benchmark => false 
    - :backtrace => false 
    - :bulk_threshold => 1000 
    - REMOTE SOURCES: 
    - http://gems.rubyforge.org/ 
[email protected]:~$ 

Vous pouvez ensuite rechercher le fichier .rb particulier que vous essayez d'exiger. De plus, vous pouvez imprimer le contenu de $: de RIR pour voir la liste des chemins que Ruby recherchera les modules:

[email protected]:~$ irb 
irb(main):001:0> $: 
=> ["/usr/local/ruby/lib/ruby/site_ruby/1.8", "/usr/local/ruby/lib/ruby/site_ruby/1.8/i686-linux", "/usr/local/ruby/lib/ruby/site_ruby", "/usr/local/ruby/lib/ruby/vendor_ruby/1.8", "/usr/local/ruby/lib/ruby/vendor_ruby/1.8/i686-linux", "/usr/local/ruby/lib/ruby/vendor_ruby", "/usr/local/ruby/lib/ruby/1.8", "/usr/local/ruby/lib/ruby/1.8/i686-linux", "."] 
irb(main):002:0> 
2

La question que je demande vraiment est pourquoi exiger ne prend pas le nom de la gemme .

L'installation d'un joyau récupère les fichiers sur votre système. Il ne fait aucune réclamation quant à ce que ces fichiers seront appelés.
As laurie points out Il existe plusieurs conventions sur la façon dont ils sont nommés, mais il n'y a rien pour les appliquer, et de nombreux auteurs de gem ne s'y conforment malheureusement pas.

En outre, dans le cas où ce n'est pas le cas, quel est le moyen le plus facile de trouver l'incantation secrète pour exiger la chose putain?

Lisez les documents pour votre gemme?
Je trouve que googling pour rdoc gemname trouvera habituellement the official rdocs for your gem, qui vous montre habituellement comment l'utiliser. Memcache n'est peut-être pas le meilleur exemple, car ils supposent que vous l'utiliserez à partir de rails, et le 'require' aura déjà été fait pour vous, mais la plupart des autres que j'ai vu ont des exemples qui montrent le corriger les incantations 'require'

46

Mon système ne semble pas non plus connaître l'existence de RubyGems - à moins que je ne le dise. La commande 'require' est écrasée par RubyGems afin de pouvoir charger les gemmes, mais à moins que vous n'ayez déjà besoin de RubyGems, vous n'avez aucune idée de comment faire cela. Donc, si vous écrivez votre propre, vous pouvez faire:

require 'rubygems' 
require 'gem-name-here' 

Si vous utilisez quelqu'un d'autre code, vous pouvez le faire sur la ligne de commande avec:

ruby -r rubygems script.rb 

En outre, il y a une la variable d'environnement Ruby utilise pour déterminer ce qu'il doit charger au démarrage:

export RUBYOPT=rubygems 

(. de http://www.rubygems.org/read/chapter/3 L'environnement variable a été chose me fit remarquer par Orion Edwards)

(Si « require « rubygems » ne fonctionne pas pour vous, mais, ce conseil est d'une utilité limitée :)

0

moi aussi eu ce problème depuis l'installation de Mac OS X Lion, et a constaté que même si je courais le code suivant je recevrais toujours le message d'avertissement. require 'rubygems' require 'nokogiri'

J'ai essayé des tas de solutions affichées ici et sur le web, mais à la fin de mon travail autour de la solution était de simplement suivre les instructions à http://martinisoftware.com/2009/07/31/nokogiri-on-leopard.html réinstaller LibXML & Libxslt de la source, mais assurant la version de LibXML J'ai installé correspondait à celui qui était attendu par Nokogiri.

Une fois que j'avais fait cela, les avertissements sont partis.

0

J'ai eu ce problème parce que j'utilise RVM et essayait d'utiliser la mauvaise version de ruby. La gemme en question avait besoin de 1.9.2 et j'avais réglé 2.0.0 par défaut! Peut-être une erreur stupide, mais que quelqu'un d'autre arrivant sur cette page aura probablement fait.

7

rails Aussi les gens doivent se rappeler de redémarrer le serveur rails après avoir installé un petit bijou

+0

Cela fonctionne. Ne pas oublier de redémarrer. –

1

Une question que je viens de croiser était que la pierre précieuse construite réelle n'a pas été compris tous les fichiers qu'il devrait avoir.

Le problème avec files était qu'il y avait une erreur de syntaxe dans le dans gemspec, mais aucune erreur n'a été levée pendant la construction. Juste ajouter ceci ici au cas où quelqu'un d'autre se heurte au même problème.

0

Regarder la source de gem et vérifier le répertoire lib. S'il n'y a pas de fichier rb alors vous devez pointer vers gem fichier principal rb dans sous-répertoire:

require 'dir/subdir/file' 

pour /lib/dir/subdir/file.rb.

Questions connexes