J'ai une gemme installée mais j'ai besoin de 'gemname' ne fonctionne pas. Pourquoi?

StackOverflow https://stackoverflow.com/questions/132867

  •  02-07-2019
  •  | 
  •  

Question

La question que je me pose vraiment est de savoir pourquoi require ne prend pas le nom de la gemme. De plus, dans le cas contraire, quel est le moyen le plus simple de trouver l’incantation secrète qui exige le foutre chose?

Par exemple, si memcache-client est installé, je dois le demander à l'aide de

.
require 'rubygems'
require 'memcache'
Était-ce utile?

La solution

Il n’existe pas de norme concernant le fichier à inclure. Cependant, il existe certaines conventions couramment suivies que vous pouvez suivre, essayez d'utiliser:

  • Souvent, le fichier s'appelle le même. nommer comme la gemme. Donc, nécessite mygem marchera.
  • Souvent, le fichier est le seul fichier .rb de la lib sous-répertoire de la gemme, donc si vous peut obtenir le nom de la gemme (peut-être vous parcourez vendeur / gemmes dans un rails pre 2.1 projet), alors vous pouvez inspecter # {gemname} / lib pour les fichiers .rb, et s'il n'y en a qu'un, c'est un joli bon pari qui est celui d'exiger

Si tout cela fonctionne, vous ne pouvez que regarder dans le répertoire de la gem (que vous pouvez trouver en exécutant environnement gem | grep INSTALLATION | awk '{print $ 4}' et en regardant dans le répertoire lib, vous aurez probablement besoin de lire les fichiers et d’espérer qu’un commentaire expliquera quoi faire

Autres conseils

Mon système ne semble pas non plus connaître l'existence de RubyGems - à moins que je ne le lui dise. La commande 'require' est écrasée par RubyGems afin de pouvoir charger des gems, mais à moins que vous ayez déjà requis RubyGems, il n'a aucune idée de la façon de le faire. Donc, si vous écrivez le vôtre, vous pouvez faire:

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

Si vous exécutez le code de quelqu'un d'autre, vous pouvez le faire en 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

(de http://www.rubygems.org/read/chapter/3 Orion Edwards )

(Si vous avez besoin de 'rubygems', cela ne vous aidera pas beaucoup:)

Le besoin doit être mappé sur un fichier dans le chemin de Ruby. Vous pouvez savoir où les gemmes sont installés en exécutant 'gem environment' (recherchez le répertoire d'installation):

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 ensuite rechercher le fichier .rb que vous essayez d'exiger. De plus, vous pouvez imprimer le contenu de $: from 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>

Les utilisateurs de rails doivent également se rappeler de redémarrer le serveur de rails après avoir installé une gemme

.

Vous devez inclure " rubygems " uniquement si vous avez installé la gemme avec gem . Sinon, l'incantation secrète consisterait à lancer irb et à essayer différentes combinaisons. Vous pouvez également transmettre l'option -I à l'interpréteur ruby ??afin d'inclure le répertoire d'installation de la gem, dans le LOAD_PATH . Notez que $ LOAD_PATH est un tableau, ce qui signifie que vous pouvez y ajouter des répertoires à partir de votre script.

  

La question que je me pose vraiment est de savoir pourquoi require ne prend pas le nom de la gemme.

L'installation d'une gem obtient les fichiers sur votre système. Il ne fait aucune revendication sur le nom de ces fichiers.
comme le souligne Laurie il y a plusieurs conventions sur la façon dont elles sont nommées, mais rien n’applique cela, et beaucoup d’auteurs de pierres précieuses ne s’y tiennent malheureusement pas.

  

En outre, dans le cas contraire, quel est le moyen le plus simple de trouver l’incantation secrète qui exige la fichue chose!?

Lisez la documentation de votre bijou?
Je trouve que googler pour nom_dem_rdoc trouvera généralement la rdocs officiels pour votre bijou , qui vous indiquent généralement comment l’utiliser.

Memcache n’est peut-être pas le meilleur exemple, car ils supposent que vous l’utiliserez depuis des rails, et le "require" aura déjà été créé pour vous, mais la plupart des autres que j’ai vus ont des exemples qui montrent le bon 'nécessite' des incantations

Un problème que je viens de rencontrer est que la gem réellement construite n'inclut pas tous les fichiers qu'elle devrait avoir.

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

Ajoutez simplement ceci ici au cas où quelqu'un d'autre rencontrerait le même problème.

Moi aussi j'ai eu ce problème depuis l’installation de OS X Lion et j’ai trouvé que même si j’exécutais le code suivant, je recevais toujours le message d’avertissement. nécessite 'rubygems' nécessite 'nokogiri'

J’ai essayé de nombreuses solutions publiées ici et sur le Web, mais au final, ma solution de contournement consistait simplement à suivre les instructions fournies à http://martinisoftware.com/2009/07/31/nokogiri-on-leopard.html pour réinstaller LibXML & amp; LibXSLT à partir des sources, mais en veillant à ce que la version de LibXML que j'ai installée corresponde à celle attendue par Nokogiri.

Une fois cela fait, les avertissements ont disparu.

J'ai eu ce problème parce que j'utilise rvm et que j'essayais d'utiliser la mauvaise version de ruby. La gem 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 stupide, mais une erreur que quelqu'un d'autre arrivant sur cette page aura probablement faite.

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

require 'dir/subdir/file'

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top