如何找到gem文件安装的地方

我可以找到使用gem list安装的宝石,但它不告诉我宝石安装在哪里。

我如何才能找到宝石的位置,我如何才能在安装宝石之前知道它将被安装在哪里?

313313 次浏览

你可以在命令提示符中通过运行gem help commands来检查它,然后选择适当的命令:

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

现在从上面我可以看到命令environment是有帮助的。所以我会这样做:

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

最后告诉你你的要求,我会这样做:

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

使用gem environment来了解你的gem环境:

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

请注意以下两部分:

  • INSTALLATION DIRECTORY
  • GEM PATHS

gem env就像gem environment一样工作。节省一些输入。

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

安装宝石后,如果你想知道一个特定的宝石在哪里。试着打字:

 gem list

您将能够看到您已安装的宝石列表。现在使用bundle show并为你想知道路径的宝石命名,如下所示:

 bundle show <gemName>

或者(bundler的年轻版本):

 bundle info <gemName>

为了完成其他答案,gem-path宝石可以找到特定宝石的安装路径。

安装:

gem install gem-path

用法:

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

这真的很方便,因为你可以用它来grep或编辑文件:

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

我发现它有用的库文件的位置:

gem which *gemname*

你可以欺骗gem open显示宝石路径:

VISUAL=echo gem open gem-name

例子:

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

它只是工作,没有第三方宝石是必要的。

gem env列出了宝石可以被安装的位置,但这可以是10个或更多的位置。如果你想知道特定的gem 安装在哪里,你可以执行:

gem list -d <gemname>

示例输出:

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

如果你正在使用RVM工具,你可以运行这个命令打印gem路径:

rvm gemdir

echo $GEM_HOME

这可以为你提供每个宝石的安装路径。这在尝试进行多级docker构建时非常有用。你可以拷贝到特定的目录后bundle安装。

bash-4.4# gem list -d

输出:

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

你可以去rails console并做

Gem.bin_path('<gem-name>', '<gem-executable-name>')

它返回gem文件可执行文件的确切路径。

裁判:https://www.rubydoc.info/github/rubygems/rubygems/Gem.bin_path