Ruby/Linux 已安装的 gem 未加载
Ruby/Linux Installed gems not loaded
我正在设置新的 Ubuntu 18.04 VM,我的 Ruby 应用程序出现问题。 Ruby 是版本 2.5.1(18.04 的标准)。 Gem 使用 sudo 安装,因为它们由应用 运行 在几个不同的 uid 下加载。
他们没有找到任何已安装的 gem!
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 环境说:
- 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/
欢迎就如何诊断此问题提出任何建议!我正在考虑擦除 VM 并重新开始——不幸的是,这不是微不足道的。
一个额外的数据点。 gems 最初是由 puppet 安装的,它使用拒绝 'other' 访问的 umask 运行(puppet 包 gem 提供程序的已知功能)。我手动卸载了它们,然后使用正确的 umask 从进程中重新安装了它们。我已经仔细检查了安装的gems.
中所有文件的权限
我最好的猜测是还有其他东西有错误的权限,导致 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 目录,但没有修复其他目录。特别是在加载 gems 时会访问特定规范,仅修复此问题即可加载 gems。
非常令人困惑的是 ruby 捕获了文件权限失败,您得到的只是 erroneous/confusing“无法加载此类文件 -- ”
我正在设置新的 Ubuntu 18.04 VM,我的 Ruby 应用程序出现问题。 Ruby 是版本 2.5.1(18.04 的标准)。 Gem 使用 sudo 安装,因为它们由应用 运行 在几个不同的 uid 下加载。
他们没有找到任何已安装的 gem!
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 环境说:
- 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/
欢迎就如何诊断此问题提出任何建议!我正在考虑擦除 VM 并重新开始——不幸的是,这不是微不足道的。
一个额外的数据点。 gems 最初是由 puppet 安装的,它使用拒绝 'other' 访问的 umask 运行(puppet 包 gem 提供程序的已知功能)。我手动卸载了它们,然后使用正确的 umask 从进程中重新安装了它们。我已经仔细检查了安装的gems.
中所有文件的权限我最好的猜测是还有其他东西有错误的权限,导致 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 目录,但没有修复其他目录。特别是在加载 gems 时会访问特定规范,仅修复此问题即可加载 gems。
非常令人困惑的是 ruby 捕获了文件权限失败,您得到的只是 erroneous/confusing“无法加载此类文件 --