Ruby 无法加载 'random',默认 gem
Ruby can't load 'random', a default gem
这是我第一次使用 Ruby,我正在使用 random
。当我 运行 ruby main.rb
时,我收到此错误消息:
Traceback (most recent call last):
6: from main.rb:3:in `<main>'
5: from main.rb:3:in `require_relative'
4: from /home/groctel/Documents/Repositories/civitas-ruby/Civitas/lib/civitas_juego.rb:4:in `<top (required)>'
3: from /home/groctel/Documents/Repositories/civitas-ruby/Civitas/lib/civitas_juego.rb:4:in `require_relative'
2: from /home/groctel/Documents/Repositories/civitas-ruby/Civitas/lib/dado.rb:3:in `<top (required)>'
1: from /usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- random (LoadError)
于是,我认真地查了资料。这是踪迹:
main.rb
# encoding:utf-8
require_relative "civitas_juego.rb"
require_relative "dado.rb"
require_relative "practica3.rb"
require_relative "vista_textual.rb"
# ...
dado.rb
# encoding:utf-8
require 'random'
require 'singleton'
require_relative 'diario'
# ...
而错误的最深层来源,kernel_require.rb
def require(path)
RUBYGEMS_ACTIVATION_MONITOR.enter
path = path.to_path if path.respond_to? :to_path
if spec = Gem.find_unresolved_default_spec(path)
Gem.remove_unresolved_default_spec(spec)
begin
Kernel.send(:gem, spec.name)
rescue Exception
RUBYGEMS_ACTIVATION_MONITOR.exit
raise
end
end
# If there are no unresolved deps, then we can use just try
# normal require handle loading a gem from the rescue below.
if Gem::Specification.unresolved_deps.empty?
RUBYGEMS_ACTIVATION_MONITOR.exit
return gem_original_require(path) # <- THIS IS LINE 54
end
我是 运行ning Arch Linux ruby 2.6.5-1。据我了解 from the documentation,random
是内核 class 而不是 gem 我必须自己构建。尽管如此,我还是尝试了 gem install random
并得到了这个错误:
Building native extensions. This could take a while...
ERROR: Error installing random:
ERROR: Failed to build gem native extension.
current directory: /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1/ext/random
/usr/bin/ruby -I /usr/lib/ruby/2.6.0 -r ./siteconf20191112-16451-127m0rj.rb extconf.rb
creating Makefile
current directory: /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1/ext/random
make "DESTDIR=" clean
current directory: /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1/ext/random
make "DESTDIR="
compiling mersenne_twister_ext.c
mersenne_twister_ext.c: In function ‘mt_initialize’:
mersenne_twister_ext.c:294:25: error: ‘struct RArray’ has no member named ‘len’
294 | if (RARRAY(arg_seed)->len < N)
| ^~
mersenne_twister_ext.c:295:29: error: ‘struct RArray’ has no member named ‘len’
295 | max = RARRAY(arg_seed)->len;
| ^~
mersenne_twister_ext.c: At top level:
mersenne_twister_ext.c:246:17: warning: ‘differ’ is static but declared in inline function ‘hash’ which is not static
246 | static uint32 differ = 0; // guarantee time-based seeds will change
| ^~~~~~
make: *** [Makefile:245: mersenne_twister_ext.o] Error 1
make failed, exit code 2
Gem files will remain installed in /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1 for inspection.
Results logged to /home/groctel/.gem/ruby/2.6.0/extensions/x86_64-linux/2.6.0/random-0.2.1/gem_make.out
我不知道接下来该怎么做,看来我走错了方向。
我需要做什么才能加载 random
?
您不需要要求 random
,因为它已包含在 Ruby 中。所以没有 gem 需要安装,没有什么要求,你基本上可以直接使用它。
这是我第一次使用 Ruby,我正在使用 random
。当我 运行 ruby main.rb
时,我收到此错误消息:
Traceback (most recent call last):
6: from main.rb:3:in `<main>'
5: from main.rb:3:in `require_relative'
4: from /home/groctel/Documents/Repositories/civitas-ruby/Civitas/lib/civitas_juego.rb:4:in `<top (required)>'
3: from /home/groctel/Documents/Repositories/civitas-ruby/Civitas/lib/civitas_juego.rb:4:in `require_relative'
2: from /home/groctel/Documents/Repositories/civitas-ruby/Civitas/lib/dado.rb:3:in `<top (required)>'
1: from /usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- random (LoadError)
于是,我认真地查了资料。这是踪迹:
main.rb
# encoding:utf-8
require_relative "civitas_juego.rb"
require_relative "dado.rb"
require_relative "practica3.rb"
require_relative "vista_textual.rb"
# ...
dado.rb
# encoding:utf-8
require 'random'
require 'singleton'
require_relative 'diario'
# ...
而错误的最深层来源,kernel_require.rb
def require(path)
RUBYGEMS_ACTIVATION_MONITOR.enter
path = path.to_path if path.respond_to? :to_path
if spec = Gem.find_unresolved_default_spec(path)
Gem.remove_unresolved_default_spec(spec)
begin
Kernel.send(:gem, spec.name)
rescue Exception
RUBYGEMS_ACTIVATION_MONITOR.exit
raise
end
end
# If there are no unresolved deps, then we can use just try
# normal require handle loading a gem from the rescue below.
if Gem::Specification.unresolved_deps.empty?
RUBYGEMS_ACTIVATION_MONITOR.exit
return gem_original_require(path) # <- THIS IS LINE 54
end
我是 运行ning Arch Linux ruby 2.6.5-1。据我了解 from the documentation,random
是内核 class 而不是 gem 我必须自己构建。尽管如此,我还是尝试了 gem install random
并得到了这个错误:
Building native extensions. This could take a while...
ERROR: Error installing random:
ERROR: Failed to build gem native extension.
current directory: /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1/ext/random
/usr/bin/ruby -I /usr/lib/ruby/2.6.0 -r ./siteconf20191112-16451-127m0rj.rb extconf.rb
creating Makefile
current directory: /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1/ext/random
make "DESTDIR=" clean
current directory: /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1/ext/random
make "DESTDIR="
compiling mersenne_twister_ext.c
mersenne_twister_ext.c: In function ‘mt_initialize’:
mersenne_twister_ext.c:294:25: error: ‘struct RArray’ has no member named ‘len’
294 | if (RARRAY(arg_seed)->len < N)
| ^~
mersenne_twister_ext.c:295:29: error: ‘struct RArray’ has no member named ‘len’
295 | max = RARRAY(arg_seed)->len;
| ^~
mersenne_twister_ext.c: At top level:
mersenne_twister_ext.c:246:17: warning: ‘differ’ is static but declared in inline function ‘hash’ which is not static
246 | static uint32 differ = 0; // guarantee time-based seeds will change
| ^~~~~~
make: *** [Makefile:245: mersenne_twister_ext.o] Error 1
make failed, exit code 2
Gem files will remain installed in /home/groctel/.gem/ruby/2.6.0/gems/random-0.2.1 for inspection.
Results logged to /home/groctel/.gem/ruby/2.6.0/extensions/x86_64-linux/2.6.0/random-0.2.1/gem_make.out
我不知道接下来该怎么做,看来我走错了方向。
我需要做什么才能加载 random
?
您不需要要求 random
,因为它已包含在 Ruby 中。所以没有 gem 需要安装,没有什么要求,你基本上可以直接使用它。