配置gem安装目录以匹配用户安装目录

时间:2018-04-20 04:09:11

标签: ruby rubygems

我熟悉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 gemdirInvalid option

(为什么一个值有三个不同的名称,一个密切相关的值只有最少可用的类似名称,这也不是这个问题的含义。)

我知道我可以在$HOME/.gemrc中配置一些内容,但我发现的文档和示例并未向我说明如何操纵INSTALLATION DIRECTORY。听起来我可以通过添加行gem: --user-install来实现这一点,但是installuninstallupdate可能必须至少有三行,但添加gem:行不会改变gem env的输出,所以也许这些都不会真正做到我想要的。

2 个答案:

答案 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