Cómo encontrar dónde están instalados los archivos de gemas

289

Puedo encontrar gemas que se instalan usando gem list, pero no me muestra dónde están instaladas las gemas.

¿Cómo puedo encontrar dónde están las gemas y cómo puedo saber antes de instalar una gema dónde se instalará?

hierro y
fuente

Respuestas:

374

Úselo gem environmentpara conocer su entorno de gemas:

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

Observe las dos secciones para:

  • INSTALLATION DIRECTORY
  • GEM PATHS
el hombre de hojalata
fuente
¡Gracias por tu información! En mi entorno, parece que GEM PATHSsolo se usa el primero. ¿Está bien?
ironsand
8
gem envpara abreviar
zanderwar
Yo miraría en el EXECUTABLE DIRECTORY.
Matt Setter
El EXECUTABLE DIRECTORYcontiene las versiones ejecutables CLI instalados por las gemas, pero no es de los propios gemas.
The Tin Man
146

Me resultó útil obtener una ubicación del archivo de la biblioteca con:

gem which *gemname*
Rustam A. Gasanov
fuente
66
Este es un método simple muy agradable que no requiere bundler (aunque me encanta bundler :-).
antinome
2
respuesta más simple, no requiere rieles, o paquete! ¡BUENA ESA!
lacostenycoder
Me gusta esta versión porque es útil para las personas que realizan el desarrollo logstash (sin paquete en mis servidores). El ejemplo es útil:gem which 'logstash/inputs/tcp.rb'
Cameron Kerr
Eso no siempre funcionará. Funciona solo cuando su gema existe como ejecutable en su directorio PATH.
GiriB
74

Después de instalar las gemas, si quieres saber dónde está una gema en particular. Intenta escribir:

 gem list

Podrá ver la lista de gemas que ha instalado. Ahora usa bundle showy nombra la gema para la que quieres conocer el camino, así:

 bundle show <gemName>
ishanbakshi
fuente
2
No estoy seguro de que esto funcione en todos los directorios. Ejecuté este comando y lo conseguí Could not locate Gemfile or .bundle/ directory.
Richie Thomas
1
Esa es la mejor manera, ya que muestra la ruta completa, (mientras que gem env) muestra sólo la carpeta principal de la gemscarpeta: /home/test/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0. Hay una serie de carpetas en su interior y su gema puede estar ubicada en casi cualquiera de ellas, eso es lo que se bundle show <gemName>muestra exactamente (y gem env) no.
programa
49

Para completar otras respuestas, la gema de ruta de gema puede encontrar la ruta de instalación de una gema en particular.

Instalación:

gem install gem-path

Uso:

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

Esto es realmente útil ya que puede usarlo para grep o editar archivos:

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

Puede verificarlo desde el símbolo del sistema ejecutando gem help commandsy luego seleccionando el comando adecuado:

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

Ahora de lo anterior puedo ver que el comando environmentes útil. Entonces yo haría:

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

Finalmente para mostrarte lo que pediste, haría:

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
fuente
1
¡Gracias! No sabía el gem help commands. Y debería haber escrito que estoy usando rbenv.
ironsand
17

Puedes engañar gem openpara mostrar la ruta de la gema:

VISUAL=echo gem open gem-name

Ejemplo:

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

Simplemente funciona, y no es necesaria una gema de terceros.

Jerome Dalbert
fuente
2
¡Esto es perfecto! Es una pena que esta información útil sea un efecto secundario en lugar de un comando intencional. Tenga en cuenta que también puede especificar el "editor" con la -eopción ( -e echo), si es más fácil que configurar una variable de entorno.
Steve
¡Hermoso! Simplemente omita la última parte e ingrese a ese directorio en su editor y desgarre las gemas ;-)
ARK
14

gem envfunciona igual gem environment. Guarda algo de tipeo.

# 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
fuente
No es "funciona igual que", es el mismo comando. gem help commandsdevuelve "Los comandos se pueden abreviar, siempre y cuando no sean ambiguos. Por ejemplo, 'gem i rake' es la abreviatura de 'gem install rake' " . En otras palabras gem environment, gem envy gem etodo funciona pero gem environmentes autodocumentado para aquellos que no saben qué está haciendo, así que deberíamos usar eso para los novatos.
The Tin Man
2

Las gem envlistas donde se pueden instalar gemas , pero pueden ser 10 o más ubicaciones. Si quieres saber dónde está instalada una gema en particular , puedes ejecutar:

gem list -d <gemname>

Salida de ejemplo:

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
fuente
0

si está utilizando la herramienta rvm, puede ejecutar este comando para imprimir la ruta de la gema:

rvm gemdir

O

echo $GEM_HOME
ruslan
fuente
0

Esto funciona y te da la ruta instalada para cada gema. Esto es muy útil cuando intentas hacer compilaciones de acopladores de varias etapas. Puedes copiar en el directorio específico posterior a la instalación del paquete.

bash-4.4# gem list -d

Salida::

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
usuario2966600
fuente