Como descobrir onde os arquivos gem estão instalados


289

Posso encontrar gemas que são instaladas usando gem list, mas isso não me mostra onde as gemas estão instaladas.

Como posso encontrar onde estão as gemas e como posso saber antes de instalar uma gema onde será instalada?

Respostas:


374

Use gem environmentpara descobrir sobre o seu ambiente 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 as duas seções para:

  • INSTALLATION DIRECTORY
  • GEM PATHS

Obrigado pela sua informação! No meu ambiente, parece que GEM PATHSsão usados ​​apenas o primeiro. Isso está certo?
ironsand

8
gem envpara o short
zanderwar

Eu procuraria no EXECUTABLE DIRECTORY.
Matt Setter

O EXECUTABLE DIRECTORYcontém as versões executáveis ​​da CLI instaladas pelas gemas, mas não são as próprias gemas.
The Tin Man

146

Achei útil obter uma localização do arquivo da biblioteca com:

gem which *gemname*

6
Este é um método simples muito bom que não requer empacotador (embora eu adore o empacotador :-).
Antinome

2
resposta mais simples, não requer trilhos ou empacotador! AGRADÁVEL!
precisa

Eu gosto desta versão porque é útil para pessoas que desenvolvem o logstash (nenhum empacotador nos meus servidores). Exemplo é útil:gem which 'logstash/inputs/tcp.rb'
Cameron Kerr

Isso nem sempre funciona. Funciona apenas quando sua jóia existe como executável no diretório PATH.
GiriB

74

Depois de instalar as gemas, se você quiser saber onde está uma gema específica. Tente digitar:

 gem list

Você poderá ver a lista de gemas que instalou. Agora use bundle showe nomeie a gema para a qual deseja conhecer o caminho, desta forma:

 bundle show <gemName>

2
Não tenho certeza de que isso funcione em todos os diretórios. Eu executei este comando e consegui Could not locate Gemfile or .bundle/ directory.
18717 Richie Thomas

1
Essa é a melhor maneira, porque mostra o caminho completo, (enquanto gem env) mostra apenas a pasta pai para a gemspasta: /home/test/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0. Há várias pastas dentro dela e sua jóia pode estar localizada em quase qualquer uma delas - é isso que bundle show <gemName>mostra exatamente (e gem env) não.
programas

49

Para concluir outras respostas, a gema gem-path pode encontrar o caminho de instalação de uma gema específica.

Instalação:

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

Isso é realmente útil, pois você pode usá-lo para grep ou editar arquivos:

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

33

Você pode verificá-lo no prompt de comando executando gem help commandse selecionando o comando apropriado:

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

Agora, pelo exposto, posso ver que o comando environmenté útil. Então eu faria:

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 mostrar o que você pediu, eu faria:

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
Obrigado! Eu não sabia o gem help commands. E eu deveria ter escrito que estou usando rbenv.
ironsand

17

Você pode enganar gem openpara exibir o caminho da gema:

VISUAL=echo gem open gem-name

Exemplo:

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

Simplesmente funciona, e nenhuma joia de terceiros é necessária.


2
Isto é perfeito! É uma pena que essas informações úteis sejam um efeito colateral em vez de um comando intencional. Observe que você também pode especificar o "editor" com a -eopção ( -e echo), se for mais fácil do que definir uma variável de ambiente.
Steve

Lindo! Apenas omita a última parte e entre nesse diretório do seu editor e rasgue as gemas ;-)
ARK

14

gem envfunciona exatamente como gem environment. Economiza digitação.

# 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/

Não é "funciona como", é o mesmo comando. gem help commandsretornos " Os comandos podem ser abreviados, desde que sejam inequívocas. por exemplo, 'jóia i ancinho' é a abreviação de 'gem install ancinho'. " Em outras palavras, gem environment, gem enve gem etodo o trabalho, mas gem environmenté auto-documentado para aqueles que não sabem o que está fazendo, devemos usar isso para iniciantes.
the Tin Man

2

As gem envlistas onde as gemas podem ser instaladas, mas podem ser 10 ou mais locais. Se você deseja saber onde uma jóia específica está instalada, você pode executar:

gem list -d <gemname>

Exemplo de saída:

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

se você estiver usando a ferramenta rvm, poderá executar este comando para imprimir o caminho da gema:

rvm gemdir

OU

echo $GEM_HOME

0

Isso funciona e fornece o caminho instalado para cada gema. Isso é super útil ao tentar criar docker de vários estágios. É possível copiar na instalação pós-pacote configurável do diretório específico.

bash-4.4# gem list -d

Resultado::

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.