63 votes

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

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

Par exemple, si memcache-client installés, je dois le demander en utilisant

 require 'rubygems'
require 'memcache'
 

48voto

Atiaxi Points 1349

Mon système ne semble pas savoir à propos de RubyGems' existence - sauf si je lui dis de. Le 'besoin' de la commande sera écrasé par RubyGems de sorte qu'il peut charger des pierres précieuses, mais à moins d'avoir RubyGems déjà exigé qu'il n'a aucune idée de comment le faire. Donc, si vous écrivez votre propre, vous pouvez le faire:

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

Si vous exécutez de quelqu'un d'autre code, vous pouvez le faire en ligne de commande avec:

ruby -r rubygems script.rb

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

export RUBYOPT=rubygems

(à partir de http://www.rubygems.org/read/chapter/3. La variable d'environnement de la chose m'a été signalé par Orion Edwards)

(Si "require 'rubygems' ne fonctionne pas pour vous, cependant, ces conseils sont de peu d'aide :)

38voto

Laurie Young Points 37065

Il n'y a pas de norme pour ce que le fichier que vous devez inclure. Cependant, il existe certains communément suivi des conventions que vous pouvez vous pouvez suivre l'essayer et d'en faire usage:

  • Souvent, le fichier est appelé le même nom de la gemme. Donc, require mygem va travailler.
  • Souvent, le fichier est la seule .rb fichier dans le répertoire lib sous-répertoire de la gemme, Donc si vous pouvez obtenir le nom de la gemme (peut-être vous êtes itterating par vendeur/pierres précieuses dans un pré 2.1 rails projet), alors vous pouvez inspecter #{gemname}/lib .rb fichiers, et s'il n'existe qu'une, c'est un joli fort à parier que c'est le seul à exiger

Si tout cela fonctionne, alors tout ce que vous pouvez faire est de regarder dans le joyau du répertoire (que vous pouvez trouver en cours d'exécution gem environment | grep INSTALLATION | awk '{print $4}' et à la recherche dans le répertoire lib, Vous aurez probablement besoin de lire les fichiers et espérons qu'il y est un commentaire expliquant quoi faire

10voto

Kyle Burton Points 10471

Le require doit correspondre à un fichier dans le chemin de Ruby. Vous pouvez savoir où les pierres précieuses sont installées en exécutant «environnement de pierre précieuse» (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>
 

3voto

Vhaerun Points 2467

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. En outre, vous pouvez passer l'option -I à l'interpréteur ruby afin d'inclure le répertoire d'installation de la gem, dans LOAD_PATH . Notez que $ LOAD_PATH est un tableau, ce qui signifie que vous pouvez y ajouter des répertoires à partir de votre script.

2voto

Orion Edwards Points 54939

La question que je suis vraiment se poser est pourquoi exiger de ne pas prendre le nom de la gemme.

L'installation d'un bijou obtient les fichiers sur votre système. Il ne prétend en aucun cas à ce que ces fichiers seront appelés.
Comme laurie rappelle il y a plusieurs conventions pour la façon dont ils sont nommés, mais il n'y a rien à faire valoir, et de nombreuses pierres auteurs, malheureusement, ne collent pas à eux.

Aussi, Dans le cas où il ne l'est pas, quelle est la meilleure façon de trouver le secret de l'incantation pour exiger la fichue chose!?

Lisez la documentation de votre bijou?
Je trouve googler rdoc gemname trouverez généralement officiel rdocs pour votre bijou, qui généralement vous montrer comment l'utiliser.

Memcache est peut-être pas le meilleur exemple, car ils supposent que vous serez à l'aide de rails, et le "besoin" aura déjà été fait pour vous, mais la plupart des autres ceux que j'ai vu des exemples qui montrent le bon "requiert" des incantations

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X