我熟悉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
的内容移至我拥有不同用户名的其他计算机。
(当然,我必须重新安装所有的宝石或东西,这也不是这个问题的内容。)
我认为正确的方法是覆盖默认INSTALLATION DIRECTORY
并将其设置为始终与默认USER INSTALLATION DIRECTORY
匹配。
我该怎么做?
我知道我可以通过设置INSTALLATION DIRECTORY
来覆盖$GEM_HOME
,但我不知道如何让gem以我不需要解析的方式输出USER INSTALLATION DIRECTORY
在设置$GEM_HOME
之前。我可以从INSTALLATION DIRECTORY
获取gem env gemdir
,但gem env --user-install gemdir
说Invalid option
。
(为什么一个值有三个不同的名称,一个密切相关的值只有最少可用的类似名称,这也不是这个问题的含义。)
我知道我可以在$HOME/.gemrc
中配置一些内容,但我发现的文档和示例并未向我说明如何操纵INSTALLATION DIRECTORY
。听起来我可以通过添加行gem: --user-install
来实现这一点,但是install
,uninstall
和update
可能必须至少有三行,但添加gem:
行不会改变gem env
的输出,所以也许这些都不会真正做到我想要的。
答案 0 :(得分:0)
我最终把这个暴行放在我的init脚本中:
if [ ! -z "`which gem`" ]; then
GEM_HOME=`prefix=" - USER INSTALLATION DIRECTORY: "; line=\`gem env | grep "^$prefix"\`; suffix=${line#$prefix}; echo $suffix`
fi;
答案 1 :(得分:0)
您可以更新环境变量。对于我的输出:
- 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