我需要为我正在上课的类安装Ruby gem'Mechanize',并使用它来做一个项目。我正在使用Windows,并且尝试使用rubyinstaller.org网站上的devkit安装2.6.1和2.5.3版本。安装完这些版本后,我完成了'gem install mechanize'任务,并且gem正确安装。但是,当我尝试甚至使用“ require'mechanize'”时,我得到了相当大的堆栈跟踪信息,而且我无法弄清楚出了什么问题。我尝试多次卸载并重新安装所有内容。
堆栈跟踪:
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:205:in `<class:Persistent>': uninitialized constant Process::RLIMIT_NOFILE (NameError)
from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/net-http-persistent-3.0.0/lib/net/http/persistent.rb:190:in `<top (required)>'
from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/mechanize-2.7.6/lib/mechanize.rb:6:in `<top (required)>'
from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `require'
from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'
from C:/Ruby25-x64/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39:in `require'
from test.rb:1:in `<main>'
任何帮助或建议将不胜感激。谢谢!
答案 0 :(得分:3)
在这颗宝石的依赖项中,这似乎是一个已知的Windows问题,请参见:uninitialized constant Process::RLIMIT_NOFILE (NameError)
您可以尝试使用此处提供的技巧,将这行放在您的要求之前
Process::RLIMIT_NOFILE = 7 if Gem.win_platform?
require 'mechanize'
如果您真的想成为ruby开发人员并且必须使用Windows,也可以尝试在某种虚拟化环境中运行ruby。参见Developing in Ruby on Windows
更新:这是一个已知问题,并非机械化,而是其依赖性之一,请参见this issue和建议的解决方法:
找到机械化宝石的源路径。您应该从运行中找到结果部分中显示的路径之一
gem env
#look for a section that says:
- GEM PATHS:
从CD到步骤1的路径,然后在文本编辑器中进入lib/net/http/persistent.rb
:并修改此内容:
查找并删除此行:
DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4
然后在其中添加以下内容:
if Gem.win_platform? then
DEFAULT_POOL_SIZE = 256
else
DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4
end
并保存文件。请记住,如果您使用捆绑程序并计划运行bundle update
或bundle upgrade
,则将丢失这些更改。但这有望在将来的发行版中得到解决。我没有测试过,因为我不使用Windows,但是您可以尝试一下。