【问题标题】:$GEM_HOME is ignored by `gem install``gem install` 忽略了 $GEM_HOME
【发布时间】:2019-07-31 03:32:30
【问题描述】:

我设置了$GEM_HOME,但gem install 仍在安装到默认的~/.gem 目录。

This rubygems issue 说要删除.gemrc 中的--user-install 选项,但我没有.gemrc 文件。

如何让gem install 兑现$GEM_HOME 的价值?


这里我先去掉~/.gem,然后显示是自动创建的:

% rm -rf ~/.gem
% find ~ -name '*gemrc*'    
% # No output, so .gemrc doesn't exist
% echo $GEM_HOME
/home/ravi/.local/share/gem
% gem install neovim
Building native extensions. This could take a while...
Successfully installed msgpack-1.2.7
Successfully installed multi_json-1.13.1
Successfully installed neovim-0.8.0
Parsing documentation for msgpack-1.2.7
Installing ri documentation for msgpack-1.2.7
Parsing documentation for multi_json-1.13.1
Installing ri documentation for multi_json-1.13.1
Parsing documentation for neovim-0.8.0
Installing ri documentation for neovim-0.8.0
Done installing documentation for msgpack, multi_json, neovim after 0 seconds
3 gems installed
% ls -ld ~/.gem
drwxr-xr-x 1 ravi ravi 8 Mar  9 12:34 /home/ravi/.gem/

环境信息:

% gem --version
3.0.2
% gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 3.0.2
  - RUBY VERSION: 2.6.1 (2019-01-30 patchlevel 33) [x86_64-linux]
  - INSTALLATION DIRECTORY: /home/ravi/.local/share/gem
  - USER INSTALLATION DIRECTORY: /home/ravi/.gem/ruby/2.6.0
  - RUBY EXECUTABLE: /usr/bin/ruby
  - GIT EXECUTABLE: /usr/bin/git
  - EXECUTABLE DIRECTORY: /home/ravi/.local/share/gem/bin
  - SPEC CACHE DIRECTORY: /home/ravi/.cache/gem
  - SYSTEM CONFIGURATION DIRECTORY: /etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /home/ravi/.local/share/gem
     - /usr/lib/ruby/gems/2.6.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - "gem" => "--user-install"
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /home/ravi/.gem/ruby/2.6.0/bin
     - /home/ravi/bin
     - /home/ravi/.local/share/npm/bin
     - /home/ravi/.local/share/go/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/local/sbin
     - /usr/lib/jvm/default/bin
     - /usr/bin/site_perl
     - /usr/bin/vendor_perl
     - /usr/bin/core_perl
     - /usr/lib/systemd
     - /home/ravi/.local/share/miniconda3/bin
     - /home/ravi/.cabal/bin
     - /usr/lib/jvm/default/bin
     - /usr/bin/site_perl
     - /usr/bin/vendor_perl
     - /usr/bin/core_perl
%

【问题讨论】:

  • 您的gem env 显示--user-install 处于活动状态。这个选项是从哪里来的?

标签: ruby rubygems environment-variables


【解决方案1】:

rubygemssnap(Ubuntu 软件)一起安装时遇到了同样的问题,它默认安装到 ~/.gem。我可以使用--install-dir 开关更改安装目录

$ gem install --install-dir /path/to/custom/directory foo

但是,后来我在使用安装在非默认目录中的 gems 时遇到了问题。

卸载它并使用apt 安装解决了所有问题。

$ sudo snap remove ruby
$ sudo apt-get install rubygems

现在,gem 始终安装到 $GEM_HOME。为了仍然将~/.gem 作为默认安装位置,请将其添加到您的初始化脚本(例如~/.bashrc):

export GEM_HOME=$HOME/.gem
export PATH=$PATH:$GEM_HOME/bin

要覆盖安装位置,您只需在调用 gem install 之前覆盖 GEM_HOME

【讨论】:

  • 这是一个有用的细节级别,也是一个很好的第一个答案。欢迎加入社区!
【解决方案2】:

正如 Casper 在评论中指出的那样,我的配置仍然从某个地方获取 --user-install

虽然我的~/.gemrc 不存在,但我检查了/etc/gemrc 并发现以下内容:

# --user-install is used to install to $HOME/.gem/ by default since we want to separate
#                pacman installed gems and gem installed gems
install: --user-install

为了覆盖这个,我添加到我的~/.gemrc

install: --no-user-install

现在$GEM_HOME 受到尊重。

【讨论】:

  • 看起来您正在使用 Pacman package manager,其中 intentionally separates 用户安装的 gem 从包管理器安装 gem 以避免冲突。我建议只通过 RubyGems 安装 gem,不通过 Pacman 安装。
  • 这应该是install: --no-user-installinstall 而不是gem)。 guides.rubygems.org/command-reference/#gem-environment
  • @TomHale 确实做到了。
  • 好像被拒绝了。我现在没有时间审视自己。如果其他 cets 你的建议有效,我会更新它。
  • 除非您不知何故缺少终端和工作 gem 可执行文件,否则可能需要大约一分钟的时间。可能比您花在评论没有时间的时间上要少。代替我投反对票。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 2017-01-16
  • 2012-04-21
  • 1970-01-01
  • 2012-05-23
  • 2011-01-08
相关资源
最近更新 更多