Cara menemukan di mana file gem diinstal


289

Saya dapat menemukan permata yang diinstal menggunakan gem list, tetapi tidak menunjukkan kepada saya di mana permata dipasang.

Bagaimana saya bisa menemukan di mana permata itu berada, dan bagaimana saya bisa tahu sebelum memasang permata di mana permata itu akan dipasang?

Jawaban:


374

Gunakan gem environmentuntuk mencari tahu tentang lingkungan permata Anda:

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

Perhatikan dua bagian untuk:

  • INSTALLATION DIRECTORY
  • GEM PATHS

Terima kasih atas info Anda! Di lingkungan saya, sepertinya GEM PATHShanya digunakan yang pertama. Apakah itu benar?
ironsand

8
gem envsingkatnya
zanderwar

Saya akan melihat EXECUTABLE DIRECTORY.
Matt Setter

The EXECUTABLE DIRECTORYberisi versi yang dapat dieksekusi CLI diinstal oleh permata, tapi itu bukan permata itu sendiri.
the Tin Man

146

Saya merasa bermanfaat untuk mendapatkan lokasi file perpustakaan dengan:

gem which *gemname*

6
Ini adalah metode sederhana yang sangat bagus yang tidak memerlukan bundler (walaupun saya memang suka bundler :-).
Antinome

2
jawaban paling sederhana, tidak membutuhkan rel, atau bundler! BAGUS SATU!
lacostenycoder

Saya suka versi ini karena ini berguna untuk orang yang melakukan pengembangan logstash (tidak ada bundler di server saya). Contoh berguna:gem which 'logstash/inputs/tcp.rb'
Cameron Kerr

Itu tidak akan selalu berhasil. Hanya berfungsi ketika permata Anda ada yang dapat dieksekusi di direktori PATH Anda.
GiriB

74

Setelah memasang permata, jika Anda ingin tahu di mana permata tertentu berada. Coba ketikkan:

 gem list

Anda akan dapat melihat daftar permata yang telah Anda pasang. Sekarang gunakan bundle showdan beri nama permata yang ingin Anda ketahui jalurnya, seperti ini:

 bundle show <gemName>

2
Saya tidak yakin ini bekerja di semua direktori. Saya menjalankan perintah ini dan mendapatkannya Could not locate Gemfile or .bundle/ directory.
Richie Thomas

1
Itulah cara terbaik karena menunjukkan path lengkap, (sedangkan gem env) menunjukkan hanya folder induk untuk gemsfolder: /home/test/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0. Ada sejumlah folder di dalamnya dan permata Anda mungkin berada di hampir semua folder - itulah yang bundle show <gemName>menunjukkan dengan tepat (dan gem env) tidak.
prograils

49

Untuk melengkapi jawaban lain, permata-jalur permata dapat menemukan jalur pemasangan permata tertentu.

Instalasi:

gem install gem-path

Pemakaian:

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

Ini sangat berguna karena Anda dapat menggunakannya untuk menangkap atau mengedit file:

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

33

Anda dapat memeriksanya dari command prompt Anda dengan menjalankan gem help commandsdan kemudian memilih perintah yang tepat:

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

Sekarang dari atas saya bisa melihat perintahnya environmentsangat membantu. Jadi saya akan melakukan:

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

Akhirnya untuk menunjukkan kepada Anda apa yang Anda minta, saya akan lakukan:

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
Terima kasih! Saya tidak tahu gem help commands. Dan saya seharusnya menulis bahwa saya menggunakan rbenv.
ironsand

17

Anda bisa mengelabui gem openmenampilkan jalur permata:

VISUAL=echo gem open gem-name

Contoh:

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

Itu hanya bekerja, dan tidak ada permata pihak ketiga yang diperlukan.


2
Ini sempurna! Sayang sekali bahwa informasi yang berguna ini adalah efek samping daripada perintah yang disengaja. Perhatikan bahwa Anda juga dapat menentukan "editor" dengan -eopsi ( -e echo), jika lebih mudah daripada mengatur variabel lingkungan.
Steve

Cantik! Hapus saja bagian terakhir dan masuk ke direktori itu di editor Anda dan pisahkan permata ;-)
ARK

14

gem envbekerja seperti gem environment. Menghemat pengetikan.

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

Ini bukan "berfungsi seperti", itu adalah perintah yang sama. gem help commandsmengembalikan " Perintah dapat disingkat, selama mereka tidak ambigu. misalnya 'gem i rake' adalah kependekan dari 'gem install rake'. " Dengan kata lain gem environment,, gem envdan gem esemua bekerja tetapi gem environmentmendokumentasikan diri sendiri untuk mereka yang tidak tahu apa yang dilakukannya jadi kita harus menggunakannya untuk pemula.
the Tin Man

2

The gem envdaftar di mana permata dapat diinstal, tapi ini bisa 10 atau lebih lokasi. Jika Anda ingin tahu di mana permata tertentu yang diinstal, Anda bisa menjalankan:

gem list -d <gemname>

Contoh output:

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

jika Anda menggunakan alat rvm Anda dapat menjalankan perintah ini untuk mencetak path permata:

rvm gemdir

ATAU

echo $GEM_HOME

0

Ini berfungsi dan memberi Anda jalur yang dipasang untuk setiap permata. Ini sangat membantu ketika mencoba melakukan pembangunan pelabuhan multi-tahap .. Anda dapat menyalin di direktori post-bundle install tertentu.

bash-4.4# gem list -d

Keluaran::

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.