64 Stimmen

Ich habe ein Gem installiert, aber require 'gemname' funktioniert nicht. Warum?

Die eigentliche Frage, die ich mir stelle, ist, warum die Anforderung nicht den Namen des Edelsteins annimmt. Außerdem, für den Fall, dass es nicht, was ist der einfachste Weg, um die geheime Beschwörung zu finden, um das verdammte Ding zu verlangen!

Wenn ich zum Beispiel Folgendes habe memcache-client installiert ist, muss ich es mit

require 'rubygems'
require 'memcache'

49voto

Atiaxi Punkte 1629

Mein System scheint auch nichts von der Existenz von RubyGems zu wissen - es sei denn, ich sage es ihm. Der 'require'-Befehl wird von RubyGems überschrieben, so dass es Edelsteine laden kann, aber wenn man RubyGems nicht bereits benötigt, hat es keine Ahnung, wie man das macht. Wenn du also dein eigenes Programm schreibst, kannst du das tun:

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

Wenn Sie den Code von jemand anderem ausführen, können Sie dies auf der Kommandozeile mit tun:

ruby -r rubygems script.rb

Außerdem gibt es eine Umgebungsvariable, mit der Ruby bestimmt, was beim Start geladen werden soll:

export RUBYOPT=rubygems

(aus http://www.rubygems.org/read/chapter/3 . Auf die Sache mit den Umgebungsvariablen wurde ich aufmerksam gemacht von Orion Edwards )

(Wenn "require 'rubygems'" bei Ihnen nicht funktioniert, ist dieser Rat allerdings nur bedingt hilfreich :)

38voto

Laurie Young Punkte 132676

Es gibt keinen Standard dafür, welche Datei Sie einbinden müssen. Es gibt jedoch einige allgemein befolgte Konventionen, an denen Sie sich orientieren und die Sie nutzen können:

  • Oft wird die Datei gleich genannt Name wie das Gem. Also require mygem wird funktionieren.
  • Oft ist die Datei die einzige .rb-Datei in der lib Unterverzeichnis des Gems. Wenn Sie also den Namen des Edelsteins erfahren können (vielleicht man iteriert durch vendor/gems in einem Rails-Projekt vor 2.1 Projekt), dann können Sie inspizieren #{gemname}/lib für .rb-Dateien, und wenn es nur eine gibt, ist es ziemlich ziemlich sicher, dass dies diejenige ist, die benötigt wird

Wenn das alles funktioniert, müssen Sie nur noch in das Verzeichnis des Edelsteins schauen (das Sie finden können, indem Sie gem environment | grep INSTALLATION | awk '{print $4}' und im lib-Verzeichnis zu suchen, müssen Sie wahrscheinlich die Dateien lesen und hoffen, dass es einen Kommentar gibt, der erklärt, was zu tun ist

10voto

Kyle Burton Punkte 25900

Das require muss auf eine Datei im Ruby-Pfad verweisen. Sie können herausfinden, wo Gems installiert sind, indem Sie 'gem environment' ausführen (suchen Sie nach 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:~$ 

Sie können dann nach der bestimmten .rb-Datei suchen, die Sie anfordern möchten. Zusätzlich können Sie den Inhalt von $: aus irb ausgeben, um die Liste der Pfade zu sehen, in denen Ruby nach Modulen sucht:

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>

8voto

lee penkman Punkte 1110

Auch Schienenbenutzer sollten daran denken Neustart des Rails-Servers nach der Installation eines Edelsteins

3voto

Vhaerun Punkte 12116

Sie müssen "rubygems" nur einschließen, wenn Sie den Edelstein mit gem . Andernfalls würde die geheime Beschwörungsformel darin bestehen, die irb und probieren Sie verschiedene Kombinationen aus. Außerdem können Sie die -I Option an den Ruby-Interpreter, so dass Sie das Installationsverzeichnis des Gems in die LOAD_PATH . Beachten Sie, dass $LOAD_PATH ist ein Array, d.h. Sie können ihm von Ihrem Skript aus Verzeichnisse hinzufügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X