Как мне заставить мой Ruby gem «Механизировать» работать? - PullRequest
0 голосов
/ 07 февраля 2019

Мне нужно установить Ruby gem 'Mechanize' для класса, который я посещаю, и выполнить проект с его использованием.Я использую Windows, и я попытался установить версии 2.6.1 и 2.5.3 с devkits с сайта rubyinstaller.org.После установки этих версий я выполнил 'gem install mechanize', и гем установился правильно.Однако, когда я пытаюсь использовать даже «требуют« механизировать »», я получаю значительную трассировку стека и не могу понять, что не так.Я пытался удалить и переустановить все несколько раз.

Stacktrace:

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>'

Любая помощь или предложения будут с благодарностью.Спасибо!

1 Ответ

0 голосов
/ 07 февраля 2019

Кажется, это известная проблема Windows в одной из зависимостей этого гема, см .: неинициализированная константа Process :: RLIMIT_NOFILE (NameError)

Вы можете попробовать взломать файл, указанный там, чтобы поставитьэту строку перед вашим требованием

Process::RLIMIT_NOFILE = 7 if Gem.win_platform?
require 'mechanize'

Вы также можете попробовать запустить ruby ​​в какой-то виртуальной среде, если вы серьезно настроены стать разработчиком ruby ​​и должны использовать windows.См. Разработка в Ruby для Windows.

ОБНОВЛЕНИЕ: Это известная проблема не для механизации, а одна из ее зависимостей. См. эту проблему и предлагаемый обходной путь:

Найдите исходный путь камня механизации.Вы должны найти один из путей, показанных в разделе результатов, от запуска

 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, но вы можете попробовать это.

...