配置gem安装目录匹配用户安装目录
Configure gem installation directory to match user installation directory
我熟悉 node/npm 方式,并尝试使用 ruby/gem/bundler 进行设置。
gem env
的输出包括这些行:
- RUBYGEMS VERSION: 2.7.6
- RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin17]
- INSTALLATION DIRECTORY: /opt/local/lib/ruby2.5/gems/2.5.0
- USER INSTALLATION DIRECTORY: /Users/ssterling3/.gem/ruby/2.5.0
(我不明白为什么 ruby 2.5.1 的 gems 会安装在名为 2.5.0 的目录中,但这不是这个问题的问题。)
我不希望 gem
触及 $HOME
之外的任何东西,我希望以一种我永远不必编辑的方式来触碰 $HOME
当我升级 ruby 或将 $HOME
的内容移动到另一台我有不同用户名的计算机时。
(当然,我必须重新安装所有 gem 之类的东西,这也不是这个问题的目的。)
我认为正确的做法是覆盖默认值 INSTALLATION DIRECTORY
并将其设置为始终匹配默认值 USER INSTALLATION DIRECTORY
.
我该怎么做?
我知道我可以通过设置 $GEM_HOME
来覆盖 INSTALLATION DIRECTORY
,但我不知道如何让 gem 以我的方式输出 USER INSTALLATION DIRECTORY
在设置 $GEM_HOME
之前不必解析。我可以从 gem env gemdir
得到 INSTALLATION DIRECTORY
,但是 gem env --user-install gemdir
说 Invalid option
。
(为什么一个值有三个不同的名称,而一个密切相关的值只有最不可用的类似名称也不是这个问题的问题。)
我知道我可以在 $HOME/.gemrc
中配置一些东西,但是我找到的文档和示例并没有告诉我如何操作 INSTALLATION DIRECTORY
。听起来我可以通过添加行 gem: --user-install
来做到这一点,但对于 install
、uninstall
和 update
可能至少需要三行,但是添加带有 gem:
的行不会改变 gem env
的输出,所以也许 none 真的会做我想要的。
我最终将这种暴行放入我的初始化脚本中:
if [ ! -z "`which gem`" ]; then
GEM_HOME=`prefix=" - USER INSTALLATION DIRECTORY: "; line=\`gem env | grep "^$prefix"\`; suffix=${line#$prefix}; echo $suffix`
fi;
您可以更新环境变量。对于我的输出:
- RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/ivan/.rvm/gems/ruby-2.5.1
- USER INSTALLATION DIRECTORY: /home/ivan/.gem/ruby/2.5.0
- RUBY EXECUTABLE: /home/ivan/.rvm/rubies/ruby-2.5.1/bin/ruby
- EXECUTABLE DIRECTORY: /home/ivan/.rvm/gems/ruby-2.5.1/bin
- SPEC CACHE DIRECTORY: /home/ivan/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /home/ivan/.rvm/rubies/ruby-2.5.1/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /home/ivan/.rvm/gems/ruby-2.5.1
- /home/ivan/.rvm/gems/ruby-2.5.1@global
我的文件位于此处:
home/ivan/.rvm/gems/ruby-2.5.1/environment
请注意 environment
文件位于 GEM PATHS
第一个路径中。
重要:我应该通过以下方式重新加载变量:
source home/ivan/.rvm/gems/ruby-2.5.1/environment
或在大多数 shell 中更快:
. home/ivan/.rvm/gems/ruby-2.5.1/environment
我熟悉 node/npm 方式,并尝试使用 ruby/gem/bundler 进行设置。
gem env
的输出包括这些行:
- RUBYGEMS VERSION: 2.7.6
- RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-darwin17]
- INSTALLATION DIRECTORY: /opt/local/lib/ruby2.5/gems/2.5.0
- USER INSTALLATION DIRECTORY: /Users/ssterling3/.gem/ruby/2.5.0
(我不明白为什么 ruby 2.5.1 的 gems 会安装在名为 2.5.0 的目录中,但这不是这个问题的问题。)
我不希望 gem
触及 $HOME
之外的任何东西,我希望以一种我永远不必编辑的方式来触碰 $HOME
当我升级 ruby 或将 $HOME
的内容移动到另一台我有不同用户名的计算机时。
(当然,我必须重新安装所有 gem 之类的东西,这也不是这个问题的目的。)
我认为正确的做法是覆盖默认值 INSTALLATION DIRECTORY
并将其设置为始终匹配默认值 USER INSTALLATION DIRECTORY
.
我该怎么做?
我知道我可以通过设置 $GEM_HOME
来覆盖 INSTALLATION DIRECTORY
,但我不知道如何让 gem 以我的方式输出 USER INSTALLATION DIRECTORY
在设置 $GEM_HOME
之前不必解析。我可以从 gem env gemdir
得到 INSTALLATION DIRECTORY
,但是 gem env --user-install gemdir
说 Invalid option
。
(为什么一个值有三个不同的名称,而一个密切相关的值只有最不可用的类似名称也不是这个问题的问题。)
我知道我可以在 $HOME/.gemrc
中配置一些东西,但是我找到的文档和示例并没有告诉我如何操作 INSTALLATION DIRECTORY
。听起来我可以通过添加行 gem: --user-install
来做到这一点,但对于 install
、uninstall
和 update
可能至少需要三行,但是添加带有 gem:
的行不会改变 gem env
的输出,所以也许 none 真的会做我想要的。
我最终将这种暴行放入我的初始化脚本中:
if [ ! -z "`which gem`" ]; then
GEM_HOME=`prefix=" - USER INSTALLATION DIRECTORY: "; line=\`gem env | grep "^$prefix"\`; suffix=${line#$prefix}; echo $suffix`
fi;
您可以更新环境变量。对于我的输出:
- RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/ivan/.rvm/gems/ruby-2.5.1
- USER INSTALLATION DIRECTORY: /home/ivan/.gem/ruby/2.5.0
- RUBY EXECUTABLE: /home/ivan/.rvm/rubies/ruby-2.5.1/bin/ruby
- EXECUTABLE DIRECTORY: /home/ivan/.rvm/gems/ruby-2.5.1/bin
- SPEC CACHE DIRECTORY: /home/ivan/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /home/ivan/.rvm/rubies/ruby-2.5.1/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /home/ivan/.rvm/gems/ruby-2.5.1
- /home/ivan/.rvm/gems/ruby-2.5.1@global
我的文件位于此处:
home/ivan/.rvm/gems/ruby-2.5.1/environment
请注意 environment
文件位于 GEM PATHS
第一个路径中。
重要:我应该通过以下方式重新加载变量:
source home/ivan/.rvm/gems/ruby-2.5.1/environment
或在大多数 shell 中更快:
. home/ivan/.rvm/gems/ruby-2.5.1/environment