Comment trouver où les fichiers gem sont installés

289

Je peux trouver les gemmes installées à l'aide gem list, mais cela ne me montre pas où les gemmes sont installées.

Comment puis-je trouver où se trouvent les gemmes et comment savoir avant d'installer une gemme où elle sera installée?

fer à repasser
la source

Réponses:

374

Utilisez gem environmentpour découvrir votre environnement de gemmes:

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

Notez les deux sections pour:

  • INSTALLATION DIRECTORY
  • GEM PATHS
l'homme d'étain
la source
Merci pour votre information! Dans mon environnement, il semble qu'ils ne GEM PATHSsoient utilisés qu'en premier. Est-ce correct?
ironsand
8
gem envpour court
zanderwar
Je regarderais dans le EXECUTABLE DIRECTORY.
Matt Setter
Le EXECUTABLE DIRECTORYcontient les versions exécutables CLI installées par les gemmes, mais ce ne sont pas les gemmes elles-mêmes.
The Tin Man
146

J'ai trouvé utile d'obtenir un emplacement du fichier de bibliothèque avec:

gem which *gemname*
Rustam A. Gasanov
la source
6
Ceci est une méthode simple très agréable qui ne nécessite pas de bundler (bien que j'aime bundler :-).
Antinome
2
réponse la plus simple, ne nécessite pas de rails ou de bundler! JOLI!
lacostenycoder
J'aime cette version car elle est utile pour les personnes qui font du développement de logstash (pas de bundler sur mes serveurs). L'exemple est utile:gem which 'logstash/inputs/tcp.rb'
Cameron Kerr
Cela ne fonctionnera pas toujours. Fonctionne uniquement lorsque votre gemme existe en tant qu'exécutable dans votre répertoire PATH.
GiriB
74

Après avoir installé les gemmes, si vous voulez savoir où se trouve une gemme particulière. Essayez de taper:

 gem list

Vous pourrez voir la liste des gemmes que vous avez installées. Maintenant, utilisez bundle showet nommez la gemme pour laquelle vous voulez connaître le chemin, comme ceci:

 bundle show <gemName>
ishanbakshi
la source
2
Je ne suis pas sûr que cela fonctionne dans tous les répertoires. J'ai exécuté cette commande et j'ai obtenu Could not locate Gemfile or .bundle/ directory.
Richie Thomas
1
C'est la meilleure façon , car il montre le chemin complet, (alors que gem env) ne montre que le dossier parent du gemsdossier: /home/test/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0. Il y a un certain nombre de dossiers à l'intérieur et votre gemme peut être située dans presque n'importe lequel d'entre eux - c'est ce qui bundle show <gemName>s'affiche exactement (et gem env) ne l'est pas.
prograils
49

Pour compléter d'autres réponses, la gemme gem-path peut trouver le chemin d'installation d'une gemme particulière.

Installation:

gem install gem-path

Usage:

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

C'est vraiment pratique car vous pouvez l'utiliser pour grep ou éditer des fichiers:

grep -R 'Internal server error' "$(gem path thin)"
subl "$(gem path thin)"
cbliard
la source
33

Vous pouvez le vérifier à partir de votre invite de commande en exécutant gem help commandspuis en sélectionnant la commande appropriée:

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:~$ 

À partir de ce qui précède, je peux voir que la commande environmentest utile. Je ferais donc:

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:~$ 

Enfin pour vous montrer ce que vous avez demandé, je ferais:

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:~$ 
Arup Rakshit
la source
1
Merci! Je ne connaissais pas gem help commands. Et j'aurais dû écrire que j'utilise rbenv.
ironsand
17

Vous pouvez tromper gem openen affichant le chemin de la gemme:

VISUAL=echo gem open gem-name

Exemple:

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

Cela fonctionne, et aucun bijou tiers n'est nécessaire.

Jerome Dalbert
la source
2
C'est parfait! Il est dommage que ces informations utiles soient un effet secondaire au lieu d'une commande intentionnelle. Notez que vous pouvez également spécifier "l'éditeur" avec l' -eoption ( -e echo), si c'est plus facile que de définir une variable d'environnement.
Steve
Belle! Oubliez simplement la dernière partie et allez dans ce répertoire dans votre éditeur et déchirez les joyaux ;-)
ARK
14

gem envfonctionne comme gem environment. Économise de la frappe.

# 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/
slayedbylucifer
la source
Ce n'est pas "fonctionne comme", c'est la même commande. gem help commandsrenvoie "Les commandes peuvent être abrégées, tant qu'elles ne sont pas ambiguës. Par exemple," gem i rake "est l'abréviation de" gem install rake ". " En d'autres termes gem environment, gem envet gem etout fonctionne mais gem environmentest auto-documenté pour ceux qui ne savent pas ce qu'il fait, nous devons donc l'utiliser pour les débutants.
The Tin Man
2

Les gem envlistes où les gemmes peuvent être installées, mais cela peut être 10 emplacements ou plus. Si vous voulez savoir où une gemme particulière est installée, vous pouvez exécuter:

gem list -d <gemname>

Exemple de sortie:

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
tanius
la source
0

si vous utilisez l'outil rvm, vous pouvez exécuter cette commande pour imprimer le chemin de la gemme:

rvm gemdir

OU

echo $GEM_HOME
ruslan
la source
0

Cela fonctionne et vous donne le chemin installé à chaque gemme. Cela est très utile lorsque vous essayez de faire des builds de docker en plusieurs étapes. Vous pouvez copier dans le répertoire spécifique après l'installation du bundle.

bash-4.4# gem list -d

Production::

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
user2966600
la source