So finden Sie heraus, wo Gem-Dateien installiert sind


289

Ich kann Edelsteine ​​finden, die mit installiert wurden gem list, aber es zeigt mir nicht, wo die Edelsteine ​​installiert sind.

Wie kann ich herausfinden, wo sich die Edelsteine ​​befinden, und wie kann ich vor der Installation eines Edelsteins wissen, wo er installiert wird?

Antworten:


374

Verwenden gem environmentSie diese Option , um mehr über Ihre Edelsteinumgebung zu erfahren:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.1.5
  - RUBY VERSION: 2.0.0 (2013-06-27 patchlevel 247) [x86_64-darwin12.4.0]
  - INSTALLATION DIRECTORY: /Users/ttm/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0
  - RUBY EXECUTABLE: /Users/ttm/.rbenv/versions/2.0.0-p247/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/ttm/.rbenv/versions/2.0.0-p247/bin
  - SPEC CACHE DIRECTORY: /Users/ttm/.gem/specs
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-12
  - GEM PATHS:
     - /Users/ttm/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0
     - /Users/ttm/.gem/ruby/2.0.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /Users/ttm/.rbenv/versions/2.0.0-p247/bin
     - /Users/ttm/.rbenv/libexec
     - /Users/ttm/.rbenv/plugins/ruby-build/bin
     - /Users/ttm/perl5/perlbrew/bin
     - /Users/ttm/perl5/perlbrew/perls/perl-5.18.1/bin
     - /Users/ttm/.pyenv/shims
     - /Users/ttm/.pyenv/bin
     - /Users/ttm/.rbenv/shims
     - /Users/ttm/.rbenv/bin
     - /Users/ttm/bin
     - /usr/local/mysql-5.6.12-osx10.7-x86_64/bin
     - /Users/ttm/libsmi/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin
     - /usr/local/bin

Beachten Sie die beiden Abschnitte für:

  • INSTALLATION DIRECTORY
  • GEM PATHS

Danke für deine Information! In meiner Umgebung scheinen GEM PATHSnur die ersten verwendet zu werden. Ist das richtig?
Eisen und

8
gem envfür kurz
zanderwar

Ich würde in die schauen EXECUTABLE DIRECTORY.
Matt Setter

Das EXECUTABLE DIRECTORYenthält die ausführbaren CLI-Versionen, die von den Gems installiert wurden, aber es sind nicht die Gems selbst.
Der Blechmann

146

Ich fand es nützlich, einen Speicherort der Bibliotheksdatei zu erhalten mit:

gem which *gemname*

6
Dies ist eine sehr schöne einfache Methode, die keinen Bundler benötigt (obwohl ich Bundler liebe :-).
Antinom

2
einfachste Antwort, benötigt keine Schienen oder Bündler! SCHÖN!
Lacostenycoder

Ich mag diese Version, weil sie für Leute nützlich ist, die Logstash-Entwicklung betreiben (kein Bundler auf meinen Servern). Beispiel ist nützlich:gem which 'logstash/inputs/tcp.rb'
Cameron Kerr

Das wird nicht immer funktionieren. Funktioniert nur, wenn Ihr Edelstein als ausführbare Datei in Ihrem PATH-Verzeichnis vorhanden ist.
GiriB

74

Wenn Sie nach der Installation der Edelsteine ​​wissen möchten, wo sich ein bestimmter Edelstein befindet. Versuchen Sie Folgendes zu tippen:

 gem list

Sie können die Liste der Edelsteine ​​sehen, die Sie installiert haben. Verwenden bundle showund benennen Sie nun den Edelstein, für den Sie den Pfad kennen möchten, wie folgt:

 bundle show <gemName>

2
Ich bin nicht sicher, ob dies in allen Verzeichnissen funktioniert. Ich habe diesen Befehl ausgeführt und bekommen Could not locate Gemfile or .bundle/ directory.
Richie Thomas

1
Dies ist der beste Weg, da der vollständige Pfad angezeigt wird (während gem env) nur der übergeordnete Ordner für den gemsOrdner angezeigt wird : /home/test/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0. Es gibt eine Reihe von Ordnern darin und Ihr Edelstein kann sich in fast jedem von ihnen befinden - das bundle show <gemName>zeigt genau (und gem env) nicht.
Prograils

49

Um andere Antworten zu vervollständigen, kann der Edelsteinpfad den Installationspfad eines bestimmten Edelsteins finden.

Installation:

gem install gem-path

Verwendungszweck:

gem path rails
=> /home/cbliard/.rvm/gems/ruby-2.1.5/gems/rails-4.0.13
gem path rails '< 4'
=> /home/cbliard/.rvm/gems/ruby-2.1.5/gems/rails-3.2.21

Dies ist sehr praktisch, da Sie damit Dateien durchsuchen oder bearbeiten können:

grep -R 'Internal server error' "$(gem path thin)"
subl "$(gem path thin)"

33

Sie können dies an Ihrer Eingabeaufforderung überprüfen, gem help commandsindem Sie den richtigen Befehl ausführen und dann auswählen:

kirti@kirti-Aspire-5733Z:~$  gem help commands
GEM commands are:

    build                  Build a gem from a gemspec
    cert                   Manage RubyGems certificates and signing settings
    check                  Check a gem repository for added or missing files
    cleanup                Clean up old versions of installed gems in the local
                           repository
    contents               Display the contents of the installed gems
    dependency             Show the dependencies of an installed gem
    environment            Display information about the RubyGems environment
    fetch                  Download a gem and place it in the current directory
    generate_index         Generates the index files for a gem server directory
    help                   Provide help on the 'gem' command
    install                Install a gem into the local repository
    list                   Display gems whose name starts with STRING
    lock                   Generate a lockdown list of gems
    mirror                 Mirror all gem files (requires rubygems-mirror)
    outdated               Display all gems that need updates
    owner                  Manage gem owners on RubyGems.org.
    pristine               Restores installed gems to pristine condition from
                           files located in the gem cache
    push                   Push a gem up to RubyGems.org
    query                  Query gem information in local or remote repositories
    rdoc                   Generates RDoc for pre-installed gems
    regenerate_binstubs    Re run generation of executable wrappers for gems.
    search                 Display all gems whose name contains STRING
    server                 Documentation and gem repository HTTP server
    sources                Manage the sources and cache file RubyGems uses to
                           search for gems
    specification          Display gem specification (in yaml)
    stale                  List gems along with access times
    uninstall              Uninstall gems from the local repository
    unpack                 Unpack an installed gem to the current directory
    update                 Update installed gems to the latest version
    which                  Find the location of a library file you can require
    yank                   Remove a specific gem version release from
                           RubyGems.org

For help on a particular command, use 'gem help COMMAND'.

Commands may be abbreviated, so long as they are unambiguous.
e.g. 'gem i rake' is short for 'gem install rake'.
kirti@kirti-Aspire-5733Z:~$ 

Jetzt von oben kann ich sehen, dass der Befehl environmenthilfreich ist. Also würde ich tun:

kirti@kirti-Aspire-5733Z:~$ gem help environment
Usage: gem environment [arg] [options]


  Common Options:
    -h, --help                       Get help on this command
    -V, --[no-]verbose               Set the verbose level of output
    -q, --quiet                      Silence commands
        --config-file FILE           Use this config file instead of default
        --backtrace                  Show stack backtrace on errors
        --debug                      Turn on Ruby debugging


  Arguments:
    packageversion  display the package version
    gemdir          display the path where gems are installed
    gempath         display path used to search for gems
    version         display the gem format version
    remotesources   display the remote gem servers
    platform        display the supported gem platforms
    <omitted>       display everything

  Summary:
    Display information about the RubyGems environment

  Description:
    The RubyGems environment can be controlled through command line arguments,
    gemrc files, environment variables and built-in defaults.

    Command line argument defaults and some RubyGems defaults can be set in a
    ~/.gemrc file for individual users and a /etc/gemrc for all users. These
    files are YAML files with the following YAML keys:

      :sources: A YAML array of remote gem repositories to install gems from
      :verbose: Verbosity of the gem command. false, true, and :really are the
                levels
      :update_sources: Enable/disable automatic updating of repository metadata
      :backtrace: Print backtrace when RubyGems encounters an error
      :gempath: The paths in which to look for gems
      :disable_default_gem_server: Force specification of gem server host on
    push
      <gem_command>: A string containing arguments for the specified gem command

    Example:

      :verbose: false
      install: --no-wrappers
      update: --no-wrappers
      :disable_default_gem_server: true

    RubyGems' default local repository can be overridden with the GEM_PATH and
    GEM_HOME environment variables. GEM_HOME sets the default repository to
    install into. GEM_PATH allows multiple local repositories to be searched for
    gems.

    If you are behind a proxy server, RubyGems uses the HTTP_PROXY,
    HTTP_PROXY_USER and HTTP_PROXY_PASS environment variables to discover the
    proxy server.

    If you would like to push gems to a private gem server the RUBYGEMS_HOST
    environment variable can be set to the URI for that server.

    If you are packaging RubyGems all of RubyGems' defaults are in
    lib/rubygems/defaults.rb.  You may override these in
    lib/rubygems/defaults/operating_system.rb
kirti@kirti-Aspire-5733Z:~$ 

Um Ihnen zu zeigen, was Sie gefragt haben, würde ich Folgendes tun:

kirti@kirti-Aspire-5733Z:~$ gem environment gemdir
/home/kirti/.rvm/gems/ruby-2.0.0-p0
kirti@kirti-Aspire-5733Z:~$ gem environment gempath
/home/kirti/.rvm/gems/ruby-2.0.0-p0:/home/kirti/.rvm/gems/ruby-2.0.0-p0@global
kirti@kirti-Aspire-5733Z:~$ 

1
Vielen Dank! Ich wusste das nicht gem help commands. Und ich hätte schreiben sollen, dass ich rbenv benutze.
Eisen und

17

Sie können gem openden Edelsteinpfad anzeigen:

VISUAL=echo gem open gem-name

Beispiel:

VISUAL=echo gem open rails
=> /usr/local/opt/asdf/installs/ruby/2.4.3/lib/ruby/gems/2.4.0/gems/rails-5.1.4

Es funktioniert einfach und es ist kein Juwel von Drittanbietern erforderlich.


2
Dies ist perfekt! Es ist eine Schande, dass diese nützlichen Informationen ein Nebeneffekt anstelle eines absichtlichen Befehls sind. Beachten Sie, dass Sie den "Editor" auch mit der -eOption ( -e echo) angeben können , wenn dies einfacher ist als das Festlegen einer Umgebungsvariablen.
Steve

Wunderschönen! Lass einfach den letzten Teil weg und gehe in dieses Verzeichnis in deinem Editor und zerreiße die Edelsteine ​​;-)
ARK

14

gem envfunktioniert genauso wie gem environment. Spart etwas Eingabe.

# gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.14
  - RUBY VERSION: 2.0.0 (2014-02-24 patchlevel 451) [i686-linux]
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/2.0.0
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-linux
  - GEM PATHS:
     - /usr/local/lib/ruby/gems/2.0.0
     - /root/.gem/ruby/2.0.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/

Es ist nicht "funktioniert wie", es ist der gleiche Befehl. gem help commandsreturn " Befehle können abgekürzt werden, solange sie eindeutig sind. ZB 'gem i rake' steht für 'gem install rake'. " Mit anderen Worten gem environment, gem envund gem ealle Arbeiten gem environmentsind für diejenigen, die es nicht wissen, selbstdokumentierend Was es tut, sollten wir das für Anfänger verwenden.
Der Blechmann

2

Die gem envListen , in denen Edelsteine können installiert werden, aber dies kann 10 oder mehr Stellen sein. Wenn Sie wissen wollen , wo ein besonderes Juwel ist installiert, können Sie ausführen:

gem list -d <gemname>

Beispielausgabe:

tilt (2.0.9)
    Author: Ryan Tomayko
    Homepage: http://github.com/rtomayko/tilt/
    License: MIT
    Installed at: /opt/rubies/ruby-2.5.3/lib/ruby/gems/2.5.0

    Generic interface to multiple Ruby template engines

0

Wenn Sie das rvm-Tool verwenden, können Sie diesen Befehl ausführen, um den Edelsteinpfad zu drucken:

rvm gemdir

ODER

echo $GEM_HOME

0

Dies funktioniert und gibt Ihnen den installierten Pfad für jeden Edelstein. Dies ist sehr hilfreich, wenn Sie versuchen, mehrstufige Docker-Builds durchzuführen. Sie können nach der Bundle-Installation in das entsprechende Verzeichnis kopieren.

bash-4.4# gem list -d

Ausgabe::

aasm (5.0.6)
    Authors: Thorsten Boettger, Anil Maurya
    Homepage: https://github.com/aasm/aasm
    License: MIT
    Installed at: /usr/local/bundle

  State machine mixin for Ruby objects
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.