Ruby 【求助】centos 上 gem install 显示成功,但 gem list 没有相关包

new_rubyer · 2022年09月04日 · 最后由 ccmywish 回复于 2022年12月27日 · 521 次阅读

我的 ruby 项目需要一些三方库,如 oj、recog 等。我使用 gem install 安装了对应包,显示成功,但是运行项目时依旧提示缺少相关包,gem llist 也没有找到。 搜索寻找后发现 gem install 的包在 - "gem" => "--install-dir=/opt/rh/rh-ruby30/root/usr/local/share/gems --bindir /opt/rh/rh-ruby30/root/usr/local/bin" ,即/opt/rh...目录下。 我是希望能将三方包导入到/usr/local/lib/ruby/gems/3.0.0/gems 的目录下的。我应该怎么做呢?或者可以改变 ruby 项目引用的三方库的路径吗?改成/opt/rh...? 我之前安装 ruby 遇到了麻烦,rbenv,yum install rh-ruby30 都做了尝试,最后选择了下载 gz 文件自己解压编译,之前的 yum 包我已经 remove 了,这会有影响吗? 恳求大家帮忙,配了好几天,快失去信心了...... 以下是 gem env

RubyGems Environment:
  - RUBYGEMS VERSION: 3.2.33
  - RUBY VERSION: 3.0.4 (2022-04-12 patchlevel 208) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/3.0.0
  - USER INSTALLATION DIRECTORY: /root/.local/share/gem/ruby/3.0.0
  - RUBY EXECUTABLE: /usr/local/bin/ruby
  - GIT EXECUTABLE: /usr/bin/git
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - SPEC CACHE DIRECTORY: /root/.local/share/gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /usr/local/etc
  - RUBYGEMS PLATFORMS:
     - ruby
     - x86_64-linux
  - GEM PATHS:
     - /usr/local/lib/ruby/gems/3.0.0
     - /root/.local/share/gem/ruby/3.0.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://gems.ruby-china.com/"]
     - :concurrent_downloads => 8
     - "gem" => "--install-dir=/opt/rh/rh-ruby30/root/usr/local/share/gems --bindir /opt/rh/rh-ruby30/root/usr/local/bin"
  - REMOTE SOURCES:
     - http://gems.ruby-china.com/
  - SHELL PATH:
     - /usr/local/java/jdk1.8.0_321/bin
     - /opt/maven/bin
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/sbin
     - /usr/bin
     - /root/bin

你看下你的 ~/.gemrc 这个文件,把这个

"gem" => "--install-dir=/opt/rh/rh-ruby30/root/usr/local/share/gems --bindir /opt/rh/rh-ruby30/root/usr/local/bin"

删了

在 Linux 上安装 Ruby,不需要用系统的包,或者自己下载解压那么麻烦。

请直接使用 rbenv,如果您未接入外网,可以直接使用以下工具,省心省力,避免社区每个人都重复解决这个问题。

https://gitee.com/RubyKids/rbenv-cn

ccmywish 回复

我没有 ~/.gemrc 这个文件,vim~/.gemrc 的时候会直接创建一个新文件。或者我可以创建一个~./gemrc 文件来修改下面这条配置吗? "gem" => "--install-dir=/opt/rh/rh-ruby30/root/usr/local/share/gems --bindir /opt/rh/rh-ruby30/root/usr/local/bin"

new_rubyer 回复

你似乎是 root,看下 /root/.gemrc

如果这也没有,就运行 locate .gemrc 来找找

如果还是没有,就看下你的环境变量有没有设置 "--install-dir=/opt/rh/rh-ruby30/root/usr/local/share/gems --bindir /opt/rh/rh-ruby30/root/usr/local/bin"

如果设置了,把它删了试试

对了,还有可能在 /etc/gemrc

ccmywish 回复

.gemrc 文件只找到我自己创建的 参照下面网址提供的配置方式的文件。 https://kb.snapblox.com/ruby-ruby-on-rails/ruby-how-to-setup-a-custom-rubygems-environment/ 内容如下:

gem: --no-ri --no-rdoc
gempath:
- /usr/local/lib/ruby/gems/3.0.0
- /root/.local/share/gem/ruby/3.0.0
:benchmark: false
:update_sources: true
:verbose: false
:backtrace: false
:sources:
- http://gems.ruby-china.com
:bulk_threshold: 1000

但看不来没有作用。我尝试过 rbenv 和 rvm,没有成功。如果我想再去试试 rbenv,我需要卸载当前编译安装的 ruby 吗? 我的环境是 centos 7.9,root 用户。

new_rubyer 回复

你再看一下 /etc/gemrc , 这个是全局的 Gem 配置,问题应该在这里。全局的会把你自己设置的覆盖掉,所以你的不起作用。

ccmywish 回复

!!!! 在/root/.config/gem/gemrc 上找到了相关配置,我只要删除或者更改 gem:"--install..."这行就可以了吗?

---
:backtrace: false
:bulk_threshold: 1000
:sources:
- http://gems.ruby-china.com/
:update_sources: true
:verbose: true
:concurrent_downloads: 8
gem: "--install-dir=/opt/rh/rh-ruby30/root/usr/local/share/gems --bindir /opt/rh/rh-ruby30/root/usr/local/bin"

new_rubyer 回复

你把最后一行删了试试

ccmywish 回复

gem install 路径正常了!!感谢对小白的耐心教导!! 之前受到其它配置文章的影响,都是都搜索 .gemrc,没有试过直接找 gemrc。 当然果不其然又出现了其它的报错...排查去了,再次感谢!

这个 rh-ruby30 是 redhat 上用的 scl 软件集下的 ruby,之前做 foreman 的时候也用过 tfm-ruby 包,和它差不多,要使用它的话,得在 scl 环境下使用 ruby 才可以的,因为这个软件集会更改你的 gem,ruby 这些的安装位置 按照这个安装就可以了 https://www.softwarecollections.org/en/docs/guide/#sect-Enabling_Support_for_Software_Collections 或者就不要用 rh-ruby 或者其他 xx-ruby 系的包,直接去安装官方的 ruby 包

补充:

Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE

今天刚好发现了这个变量的存在,在 Ubuntu 上,全局的 gem 配置文件也在 /etc/gemrc

在 Windows 种,这个配置文件的位置在 C:/ProgramData/gemrc

需要 登录 后方可回复, 如果你还没有账号请 注册新账号