J’ai une gem installée mais nécessite ‘gemname’ ne fonctionne pas. Pourquoi?

La question que je pose vraiment est la suivante: pourquoi ne pas prendre le nom de la pierre? En outre, dans le cas contraire, quelle est la manière la plus simple de trouver l’incantation secrète pour exiger la foutue chose?

Par exemple, si je dois memcache-client installé, je dois l’exiger en utilisant

 require 'rubygems' require 'memcache' 

Il n’y a pas de norme pour le fichier à inclure. Cependant, il existe des conventions couramment suivies que vous pouvez suivre et que vous pouvez suivre:

  • Souvent, le fichier s’appelle le même nom que la gemme. Il require mygem donc require mygem fonctionne.
  • Souvent, le fichier est le seul fichier .rb dans le sous-répertoire lib de la gem, donc si vous pouvez obtenir le nom de la gem (peut-être que vous parcourez les fournisseurs / gems dans un projet de rails pré 2.1), alors vous pouvez inspecter #{gemname}/lib pour les fichiers .rb, et s’il n’y en a qu’un, c’est un très bon pari qui nécessite

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

Mon système ne semble pas non plus connaître l’existence de RubyGems – à moins que je le dise. La commande “require” est écrasée par RubyGems afin de pouvoir charger des gemmes, mais à moins que RubyGems ne soit déjà requirejs, elle ne sait pas comment faire. Donc, si vous écrivez vous-même, vous pouvez faire:

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

Si vous exécutez le code de quelqu’un d’autre, vous pouvez le faire sur la ligne de commande avec:

 ruby -r rubygems script.rb 

De plus, il existe une variable d’environnement que Ruby utilise pour déterminer ce qu’elle doit charger au démarrage:

 export RUBYOPT=rubygems 

(extrait de http://www.rubygems.org/read/chapter/3 . La variable d’environnement m’a été signalée par Orion Edwards )

(Si “requirejs” rubygems “ne fonctionne pas pour vous, cependant, ce conseil est d’une aide limitée 🙂

Le requirejs doit correspondre à un fichier dans le chemin de ruby. Vous pouvez trouver où les gems sont installés en exécutant «environnement gem» (recherchez INSTALLATION DIRECTORY):

 kburton@hypothesisf:~$ 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/ kburton@editconf:~$ 

Vous pouvez alors rechercher le fichier .rb particulier que vous tentez d’exiger. De plus, vous pouvez imprimer le contenu de $: depuis irb pour voir la liste des chemins que ruby ​​recherchera pour les modules:

 kburton@hypothesis:~$ 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> 

Rails également les gens devraient se rappeler de redémarrer le serveur de rails après avoir installé une gem

Vous devez inclure “rubygems” uniquement si vous avez installé la gem en utilisant gem . Sinon, l’incantation secrète serait de lancer irb et d’essayer différentes combinaisons. De plus, vous pouvez passer l’option -I à l’interpréteur de ruby ​​afin d’inclure le répertoire d’installation de la gem dans le champ LOAD_PATH . Notez que $ LOAD_PATH est un tableau, ce qui signifie que vous pouvez y append des répertoires depuis votre script.

La question que je pose vraiment est la suivante: pourquoi ne pas prendre le nom de la pierre?

L’installation d’une gemme récupère les fichiers sur votre système. Il ne prétend pas que ces fichiers seront appelés.
Comme le souligne Laurie, il existe plusieurs conventions sur la façon dont elles sont nommées, mais il n’ya rien à faire, et de nombreux auteurs de pierres précieuses ne les respectent malheureusement pas.

En outre, dans le cas contraire, quelle est la manière la plus simple de trouver l’incantation secrète pour exiger la foutue chose?

Lisez les documents pour votre bijou?
Je trouve que rdoc gemname pour rdoc gemname trouvera généralement les rdocs officiels pour votre gem , qui vous montre généralement comment l’utiliser.

Memcache n’est peut-être pas le meilleur exemple, car ils supposent que vous l’utiliserez à partir de rails, et que «require» aura déjà été fait pour vous, mais la plupart des autres que j’ai vus ont des exemples incantations

Un problème que je viens de rencontrer était que le véritable bijou intégré ne comprenait pas tous les fichiers qu’il devrait avoir.

Le problème avec les files était qu’il y avait une erreur de syntaxe dans le gemspec, mais aucune erreur n’a été générée pendant la construction.

Il suffit d’append ceci ici au cas où quelqu’un d’autre se heurterait au même problème.

J’ai aussi eu ce problème depuis l’installation d’OS X Lion, et j’ai constaté que même si j’exécutais le code suivant, j’aurais 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, mon travail autour de la solution consistait simplement à suivre les instructions sur http://martinisoftware.com/2009/07/31/nokogiri-on-leopard.html pour réinstaller LibXML & LibXSLT à partir des sources, mais en s’assurant que la version de LibXML que j’ai installée correspondait à celle attendue par Nokogiri.

Une fois cela fait, les avertissements ont disparu.

J’ai eu ce problème parce que j’utilise rvm et essayais d’utiliser la mauvaise version de ruby. La gemme en question avait besoin de 1.9.2 et j’avais défini 2.0.0 comme valeur par défaut! Peut-être une erreur idiote mais que quelqu’un d’autre est arrivé sur cette page.

Regardez la source de gem et vérifiez le répertoire lib . S’il n’y a pas de fichier rb , vous devez pointer vers gb principal du fichier rb dans le sous-répertoire:

 require 'dir/subdir/file' 

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