Ruby/Linux安装的gems未加载



我正在设置一个新的Ubuntu 18.04虚拟机,我的Ruby应用程序出现了问题。Ruby的版本是2.5.1(18.04的标准版本(。Gem是用sudo安装的,因为它们是由运行在几个不同uid下的应用程序加载的。

他们找不到任何安装的宝石!

rful011@secgenprd02:~$ sudo gem install sys-proctable
Fetching: sys-proctable-1.2.5.gem (100%)
Successfully installed sys-proctable-1.2.5
Parsing documentation for sys-proctable-1.2.5
Installing ri documentation for sys-proctable-1.2.5
Done installing documentation for sys-proctable after 0 seconds
1 gem installed
rful011@secgenprd02:~$ irb
irb(main):001:0> require "sys/proctable"
Traceback (most recent call last):
4: from /usr/bin/irb:11:in `<main>'
3: from (irb):1
2: from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
1: from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
LoadError (cannot load such file -- sys/proctable)

gem-env说:

- GEM PATHS:
- /var/lib/gems/2.5.0

ls:

rful011@secgenprd02:~$ ls -ld /var/lib/gems/2.5.0/gems/sys-proctable-1.2.5/
drwxr-xr-x 6 root root 181 Jul  7 17:26 /var/lib/gems/2.5.0/gems/sys-proctable-1.2.5/

欢迎对如何诊断此问题提出任何建议!我正处于考虑擦除虚拟机并重新启动的阶段——不幸的是,这并非小事。

一个额外的数据点。宝石最初是由puppet安装的,它使用拒绝"其他"访问的umask运行(puppet包宝石提供程序的已知功能(。我手动卸载了它们,然后用正确的umask从进程中重新安装。我已经仔细检查了安装的gem中所有文件的权限。

我的最佳猜测是,还有一些东西拥有错误的权限,阻止了宝石的加载。

$ gem install sys-proctable                                                                                                                                                                                             ‹2.6.1›
Fetching sys-proctable-1.2.5.gem
Successfully installed sys-proctable-1.2.5
Parsing documentation for sys-proctable-1.2.5
Installing ri documentation for sys-proctable-1.2.5
Done installing documentation for sys-proctable after 0 seconds
1 gem installed
~/code/test/ts ⌚ 3:19:05
$ irb                                                                                                                                                                                                                   ‹2.6.1›
irb(main):001:0> require 'sys/proctable'
=> true

对我有用。你使用sudo gem install而不仅仅是gem install有什么特别的原因吗?另外,您是如何安装Ruby的?我的猜测是sudo全局安装与Ruby的安装方式有冲突?我使用rbenv,它在Ubuntu上运行良好。

我终于找到了这个问题,这是一个文件权限问题,因为最初安装时使用了不正确的umask。

rful011@secgenprd02:~$ ls -ld /var/lib/gems/2.5.0/*
drwx------  2 root root    6 Jun 26 11:18 /var/lib/gems/2.5.0/build_info
drwx------  2 root root 4096 Jul  7 17:26 /var/lib/gems/2.5.0/cache
drwx------  3 root root   33 Jul  5 10:04 /var/lib/gems/2.5.0/doc
drwx------  3 root root   26 Jun 26 11:18 /var/lib/gems/2.5.0/extensions
drwxr-xr-x 29 root root 4096 Jul 13 08:28 /var/lib/gems/2.5.0/gems
drwx------  2 root root 4096 Jul 13 08:28 /var/lib/gems/2.5.0/specifications

我修复了gems目录,但没有修复其他目录。特别是在加载gem时访问特定规范,仅修复这一点就可以加载gem。

非常令人困惑的是,文件权限失败被ruby捕获,而你得到的只是错误的/令人困惑的";无法加载这样的文件--<宝石名称>quot;

最新更新